GraphService.java
package jasper.service;
import io.micrometer.core.annotation.Timed;
import jasper.domain.Ref_;
import jasper.errors.NotFoundException;
import jasper.repository.RefRepository;
import jasper.repository.filter.RefFilter;
import jasper.service.dto.DtoMapper;
import jasper.service.dto.RefNodeDto;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.security.access.prepost.PostAuthorize;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import static org.springframework.data.domain.Sort.Order.desc;
import static org.springframework.data.domain.Sort.by;
@Service
@Transactional(readOnly = true)
public class GraphService {
private static final Logger logger = LoggerFactory.getLogger(GraphService.class);
@Autowired
RefRepository refRepository;
@Autowired
DtoMapper mapper;
@PostAuthorize("@auth.canReadRef(returnObject)")
@Timed(value = "jasper.service", extraTags = {"service", "graph"}, histogram = true)
public RefNodeDto get(String url) {
var page = refRepository.findAll(RefFilter.builder().url(url).build().spec(),
PageRequest.of(0, 1, by(desc(Ref_.MODIFIED))));
if (page.isEmpty()) throw new NotFoundException("Ref " + url);
return mapper.domainToNodeDto(page.getContent().get(0));
}
}