diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangModelAssembler.java index 205bd81da8557af9393258a1c0c62c560c9d1544..16eaa4b9efc658bf68ccf80fd93c325aa9e96e9f 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangModelAssembler.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangModelAssembler.java @@ -31,6 +31,7 @@ import java.util.stream.Stream; import org.apache.commons.lang3.StringUtils; import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.Link; +import org.springframework.hateoas.LinkRelation; import org.springframework.hateoas.RepresentationModel; import org.springframework.hateoas.mediatype.hal.HalModelBuilder; import org.springframework.hateoas.server.RepresentationModelAssembler; @@ -44,6 +45,7 @@ import de.ozgcloud.alfa.common.user.UserId; import de.ozgcloud.alfa.common.user.UserRole; import de.ozgcloud.alfa.statistic.Statistic; import de.ozgcloud.alfa.wiedervorlage.WiedervorlageController; +import io.micrometer.core.annotation.Timed; import lombok.RequiredArgsConstructor; @Component @@ -60,6 +62,7 @@ class VorgangModelAssembler implements RepresentationModelAssembler<Vorgang, Ent private final VorgangService vorgangService; private final LinkedResourceProcessor<Vorgang> linkedResourceProcessor; + @Timed("http_vorgang_toCollectionModel") public RepresentationModel<EntityModel<EnhancedVorgang>> toCollectionModel(Stream<VorgangHeader> entities, VorgaengeHeaderResponse response, FindVorgaengeHeaderRequestCriteria requestCriteria, Statistic statistic) { var model = initModel(entities, statistic); @@ -131,18 +134,26 @@ class VorgangModelAssembler implements RepresentationModelAssembler<Vorgang, Ent return filterCriteria.getAssignedTo().map(UserId::toString).orElse(StringUtils.EMPTY); } + @Timed("http_vorgang_toModel") @Override public EntityModel<Vorgang> toModel(Vorgang vorgang) { var selfLinkBuilder = linkTo(VorgangController.class).slash(vorgang.getId()); - var assignLink = linkTo(methodOn(CommandByRelationController.class).createCommand(vorgang.getId(), vorgang.getId(), - vorgang.getVersion(), null)).withRel(REL_VORGANG_ASSIGN); - var wiedervorlagenLink = linkTo(methodOn(WiedervorlageController.class).findByVorgang(vorgang.getId())).withRel(REL_WIEDERVORLAGEN); return EntityModel.of(vorgang) .add(selfLinkBuilder.withSelfRel()) .add(selfLinkBuilder.withRel(REL_VORGANG_MIT_EINGANG)) - .addIf(isAssigneable(vorgang), () -> (assignLink)) - .addIf(userService.hasRole(UserRole.VERWALTUNG_USER), () -> wiedervorlagenLink); + .addIf(isAssigneable(vorgang), () -> buildAssignLink(vorgang)) + .addIf(userService.hasRole(UserRole.VERWALTUNG_USER), () -> buildWiedervorlagenLink(vorgang)); + } + + private Link buildWiedervorlagenLink(Vorgang vorgang) { + var uriBuilder = linkTo(WiedervorlageController.class).toUriComponentsBuilder().queryParam("vorgangId", vorgang.getId()).build(); + return Link.of(uriBuilder.toUriString(), LinkRelation.of(REL_WIEDERVORLAGEN)); + } + + private Link buildAssignLink(Vorgang vorgang) { + return linkTo(CommandByRelationController.class, vorgang.getId(), vorgang.getId(), vorgang.getVersion(), null) + .withRel(REL_VORGANG_ASSIGN); } boolean isAssigneable(Vorgang vorgang) { diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangService.java index cb9bb12fbd8121227543a03eb95a7b38b4b2e0e0..d25d210dfdad79080c9a4ab029413ee33fbfb0a7 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangService.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangService.java @@ -32,6 +32,7 @@ import org.springframework.stereotype.Service; import de.ozgcloud.alfa.common.user.CurrentUserService; import de.ozgcloud.alfa.common.user.UserRole; import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; +import io.micrometer.core.annotation.Timed; @Service class VorgangService { @@ -41,6 +42,7 @@ class VorgangService { @Autowired private CurrentUserService userService; + @Timed("findVorgangs") public VorgaengeHeaderResponse findVorgaengeHeader(FindVorgaengeHeaderRequestCriteria requestCriteria) { requestCriteria = setOrderBy(requestCriteria); @@ -98,11 +100,12 @@ class VorgangService { return userService.getUser().getOrganisationseinheitIds(); } + @Timed("vorgang_isVorgangEditable") public boolean isVorgangEditable(Vorgang vorgang) { - var vorgangWithEingang = vorgang instanceof VorgangWithEingang ? - (VorgangWithEingang) vorgang : - findVorgangWithEingang(vorgang.getId()); - return isVorgangWithEingangEditable(vorgangWithEingang); + if (vorgang instanceof VorgangWithEingang withEingang) { + return isVorgangWithEingangEditable(withEingang); + } + return false; } boolean isVorgangWithEingangEditable(VorgangWithEingang vorgang) { diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangServiceTest.java index fa26b153010675a2873b292c5ae8716e90ce3f98..c36a152a25329c6158ac2c2ef7f74ffcdfdc47c0 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangServiceTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangServiceTest.java @@ -368,21 +368,17 @@ class VorgangServiceTest { private final Vorgang vorgang = VorgangHeaderTestFactory.create(); private final VorgangWithEingang vorgangWithEingang = VorgangWithEingangTestFactory.create(); - @BeforeEach - void init() { - doReturn(vorgangWithEingang).when(service).findVorgangWithEingang(VorgangHeaderTestFactory.ID); - } - @Test - void shouldFindVorgangWithEingang() { - service.isVorgangEditable(vorgang); + void shouldReturnFalseForVorgangHeader() { + var result = service.isVorgangEditable(vorgang); - verify(service).findVorgangWithEingang(VorgangHeaderTestFactory.ID); + verify(service, never()).findVorgangWithEingang(VorgangHeaderTestFactory.ID); + assertThat(result).isFalse(); } @Test void shouldCheckIfVorgangIsEditable() { - service.isVorgangEditable(vorgang); + service.isVorgangEditable(vorgangWithEingang); verify(service).isVorgangWithEingangEditable(vorgangWithEingang); } @@ -390,9 +386,9 @@ class VorgangServiceTest { @ParameterizedTest @ValueSource(booleans = { true, false }) void shouldReturnCheckResult(boolean checkResult) { - when(service.isVorgangWithEingangEditable(vorgangWithEingang)).thenReturn(checkResult); + doReturn(checkResult).when(service).isVorgangEditable(any()); - var editable = service.isVorgangEditable(vorgang); + var editable = service.isVorgangEditable(vorgangWithEingang); assertThat(editable).isEqualTo(checkResult); }