diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticRemoteService.java index a2cb6eede0078e730bfb682a6fc222db8897a740..b39e47178187ac8a31b838d794bf7580f6748c67 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticRemoteService.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticRemoteService.java @@ -11,9 +11,9 @@ import org.springframework.stereotype.Service; import de.ozgcloud.alfa.AlfaProperties; import de.ozgcloud.alfa.common.GrpcUtil; import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; +import de.ozgcloud.vorgang.common.GrpcQueryOperator; import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticQuery; import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticQuery.GroupMethod; -import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticQuery.Operator; import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticRequest; import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticResponse; import de.ozgcloud.vorgang.statistic.StatisticServiceGrpc.StatisticServiceBlockingStub; @@ -62,7 +62,7 @@ class StatisticRemoteService { .setResultName(buildCountByStatusResultName(vorgangStatus)) .setPath(STATUS_PATH) .setGroupMethod(GroupMethod.COUNT) - .setOperator(Operator.EQUAL) + .setOperator(GrpcQueryOperator.EQUAL) .setOperandStringValue(vorgangStatus.name()) .build(); } @@ -72,7 +72,7 @@ class StatisticRemoteService { .setResultName(COUNT_WIEDERVORLAGE_NEXT_FRIST_RESULT_NAME) .setPath(String.format(WIEDERVORLAGE_NEXT_FRIST_PATH_TEMPLATE, alfaProperties.getApplicationName())) .setGroupMethod(GroupMethod.COUNT) - .setOperator(Operator.UNEQUAL) + .setOperator(GrpcQueryOperator.UNEQUAL) .build(); } @@ -81,7 +81,7 @@ class StatisticRemoteService { .setResultName(EXISTS_WIEDERVORLAGE_OVERDUE_RESULT_NAME) .setPath(String.format(WIEDERVORLAGE_NEXT_FRIST_PATH_TEMPLATE, alfaProperties.getApplicationName())) .setGroupMethod(GroupMethod.EXISTS) - .setOperator(Operator.LESS_THEN_OR_EQUAL_TO) + .setOperator(GrpcQueryOperator.LESS_THEN_OR_EQUAL_TO) .setOperandStringValue(OPERAND_TODAY_DATE) .build(); } @@ -102,7 +102,7 @@ class StatisticRemoteService { .setResultName(COUNT_VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_RESULT_NAME) .setPath(VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_PATH) .setGroupMethod(GroupMethod.COUNT) - .setOperator(Operator.EQUAL) + .setOperator(GrpcQueryOperator.EQUAL) .setOperandBoolValue(true) .build(); } diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/FilterCriteria.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/FilterCriteria.java index c80e8617af570fb48b34bf5bea4cd4070212630f..89fe664537bdb8c0f58eece1b848ce0a4e00b395 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/FilterCriteria.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/FilterCriteria.java @@ -22,4 +22,5 @@ class FilterCriteria { @Builder.Default private Optional<UserId> assignedTo = Optional.empty(); private boolean hasNextWiedervorlageFrist; + private boolean hasUngeleseneNachrichten; } diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/ResultPageRequestCriteria.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/ResultPageRequestCriteria.java new file mode 100644 index 0000000000000000000000000000000000000000..4b456efafc4d96b39c866323ec9f2450eaaba476 --- /dev/null +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/ResultPageRequestCriteria.java @@ -0,0 +1,13 @@ +package de.ozgcloud.alfa.vorgang; + +import lombok.Builder; +import lombok.Getter; + +@Builder(toBuilder = true) +@Getter +public class ResultPageRequestCriteria { + + private int page; + private int limit; + private OrderBy orderBy; +} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangController.java index 0bbd400966bc4a8ee9ae29beb72ba6fc158e9a48..8d23095292dea0d30595fcdde1a13e3191e61d28 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangController.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangController.java @@ -25,8 +25,6 @@ package de.ozgcloud.alfa.vorgang; import java.util.Optional; -import jakarta.servlet.http.HttpServletResponse; - import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.hateoas.EntityModel; @@ -46,6 +44,7 @@ import de.ozgcloud.alfa.common.clientattribute.ClientAttributeService; import de.ozgcloud.alfa.common.user.UserId; import de.ozgcloud.alfa.statistic.StatisticController; import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; +import jakarta.servlet.http.HttpServletResponse; @RestController @RequestMapping(VorgangController.PATH) @@ -195,12 +194,23 @@ public class VorgangController { @GetMapping(params = { PARAM_PAGE, PARAM_LIMIT, PARAM_NACHRICHTEN }) public RepresentationModel<EntityModel<EnhancedVorgang>> getAllByUngeleseneNachrichten(@RequestParam int page, @RequestParam Integer limit, @RequestParam String nachrichten) { - return EntityModel.of(EnhancedVorgang.builder().build()); + var requestCriteria = FindVorgaengeHeaderRequestCriteria.builder().page(page).limit(limit) + .filterCriteria(FilterCriteria.builder().hasUngeleseneNachrichten(PARAM_NACHRICHTEN_UNGELESENE.equals(nachrichten)).build()) + .build(); + + return handleGetAllRequest(requestCriteria); } @GetMapping(params = { PARAM_PAGE, PARAM_LIMIT, PARAM_ASSIGNED_TO, PARAM_NACHRICHTEN }) public RepresentationModel<EntityModel<EnhancedVorgang>> getAllByAssignedToAndUngeleseneNachrichten(@RequestParam int page, @RequestParam Integer limit, @RequestParam UserId assignedTo, @RequestParam String nachrichten) { - return EntityModel.of(EnhancedVorgang.builder().build()); + var requestCriteria = FindVorgaengeHeaderRequestCriteria.builder().page(page).limit(limit) + .filterCriteria(FilterCriteria.builder() + .filterByAssignedTo(true).assignedTo(asOptional(assignedTo)) + .hasUngeleseneNachrichten(PARAM_NACHRICHTEN_UNGELESENE.equals(nachrichten)) + .build()) + .build(); + + return handleGetAllRequest(requestCriteria); } } \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangRemoteService.java index bb2d49e67b4e7c57dac52b54c1aa27d329fd9525..5e183908678002a699db74e1ee0e450c98f08eb7 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangRemoteService.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangRemoteService.java @@ -29,12 +29,15 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import de.ozgcloud.alfa.common.GrpcUtil; +import de.ozgcloud.vorgang.common.GrpcQueryOperator; import de.ozgcloud.vorgang.vorgang.GrpcFilterBy; import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangRequest; import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangRequest.GrpcOrderBy; import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangResponse; import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangWithEingangRequest; import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangWithEingangResponse; +import de.ozgcloud.vorgang.vorgang.GrpcQuery; +import de.ozgcloud.vorgang.vorgang.GrpcVorgangQueryExpression; import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc.VorgangServiceBlockingStub; import net.devh.boot.grpc.client.inject.GrpcClient; @@ -59,18 +62,36 @@ class VorgangRemoteService { GrpcFindVorgangRequest buildFindVorgangRequest(FindVorgaengeHeaderRequestCriteria requestCriteria, FilterCriteria filterCriteria) { var requestBuilder = createFindVorgangRequestBuilder(requestCriteria, filterCriteria); - requestCriteria.getSearchBy().ifPresent(requestBuilder::setSearchBy); +// requestCriteria.getSearchBy().ifPresent(requestBuilder::setSearchBy); + requestCriteria.getSearchBy().ifPresentOrElse( + requestBuilder::setSearchBy, + () -> requestBuilder.setQuery(mapToGrpcQuery(filterCriteria))); return requestBuilder.build(); } private GrpcFindVorgangRequest.Builder createFindVorgangRequestBuilder(FindVorgaengeHeaderRequestCriteria requestCriteria, FilterCriteria filterCriteria) { + return createFindVorgangRequestBuilder(requestCriteria).setFilterBy(mapFilterCriteria(filterCriteria)); + } + + private GrpcFindVorgangRequest.Builder createFindVorgangRequestBuilder(FindVorgaengeHeaderRequestCriteria requestCriteria) { return GrpcFindVorgangRequest.newBuilder() .setOrderBy(GrpcOrderBy.valueOf(requestCriteria.getOrderBy().name())) .setLimit(requestCriteria.getLimit()) - .setOffset(requestCriteria.getPage() * requestCriteria.getLimit()) - .setFilterBy(mapFilterCriteria(filterCriteria)); + .setOffset(requestCriteria.getPage() * requestCriteria.getLimit()); + } + + private GrpcQuery mapToGrpcQuery(FilterCriteria filterCriteria) { + var queryBuilder = GrpcQuery.newBuilder(); + if (filterCriteria.isHasUngeleseneNachrichten()) { + queryBuilder.addExpressions(GrpcVorgangQueryExpression.newBuilder() + .setPath("ClientAttribute.OzgCloud_NachrichtenManager.hasNewPostfachNachricht") + .setOperator(GrpcQueryOperator.EQUAL) + .setOperandBoolValue(true) + .build()); + } + return queryBuilder.build(); } VorgaengeHeaderResponse buildVorgaengeHeaderResponse(GrpcFindVorgangResponse response) { diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticRemoteServiceTest.java index c46fcf4d906019549f29b03431768834a11ddf5d..8306173ae997b9ade430cb8dfe93a2a4749b531f 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticRemoteServiceTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticRemoteServiceTest.java @@ -25,9 +25,9 @@ import com.thedeanda.lorem.LoremIpsum; import de.ozgcloud.alfa.AlfaProperties; import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; +import de.ozgcloud.vorgang.common.GrpcQueryOperator; import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticQuery; import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticQuery.GroupMethod; -import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticQuery.Operator; import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticRequest; import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticResponse; import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticResult; @@ -82,7 +82,7 @@ class StatisticRemoteServiceTest { void shouldContainOperator(VorgangStatus vorgangStatus) { var query = service.buildCountByVorgangStatusQuery(vorgangStatus); - assertThat(query.getOperator()).isEqualTo(Operator.EQUAL); + assertThat(query.getOperator()).isEqualTo(GrpcQueryOperator.EQUAL); } @ParameterizedTest @@ -129,7 +129,7 @@ class StatisticRemoteServiceTest { .contains( COUNT_WIEDERVORLAGE_NEXT_FRIST_RESULT_NAME, String.format(StatisticRemoteService.WIEDERVORLAGE_NEXT_FRIST_PATH_TEMPLATE, applicationName), - Operator.UNEQUAL, + GrpcQueryOperator.UNEQUAL, GroupMethod.COUNT ); } @@ -170,7 +170,7 @@ class StatisticRemoteServiceTest { void shouldContainOperator() { var query = service.buildExistsWiedervorlageOverdueQuery(); - assertThat(query.getOperator()).isEqualTo(Operator.LESS_THEN_OR_EQUAL_TO); + assertThat(query.getOperator()).isEqualTo(GrpcQueryOperator.LESS_THEN_OR_EQUAL_TO); } @Test @@ -325,7 +325,7 @@ class StatisticRemoteServiceTest { void shouldHaveOperator() { var query = callService(); - assertThat(query.getOperator()).isEqualTo(Operator.EQUAL); + assertThat(query.getOperator()).isEqualTo(GrpcQueryOperator.EQUAL); } @Test diff --git a/pom.xml b/pom.xml index 4f00d84c16a1cc6f981d55ab11f3d1d05e2eb9fd..63d83b82f45e7cb960bc3f0d3382c29e7a999119 100644 --- a/pom.xml +++ b/pom.xml @@ -50,7 +50,7 @@ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> - <vorgang-manager.version>2.3.0</vorgang-manager.version> + <vorgang-manager.version>2.4.0-SNAPSHOT</vorgang-manager.version> <ozgcloud-common-pdf.version>3.0.1</ozgcloud-common-pdf.version> <user-manager.version>2.2.0</user-manager.version>