From 8fb69c15a28a0458ef177d86f87564b1c84de5bb Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Mon, 26 Feb 2024 11:07:33 +0100 Subject: [PATCH] =?UTF-8?q?OZG-4994=20OZG-5068=20Vorg=C3=A4nge=20filtern?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../statistic/StatisticRemoteService.java | 10 +++---- .../ozgcloud/alfa/vorgang/FilterCriteria.java | 1 + .../vorgang/ResultPageRequestCriteria.java | 13 +++++++++ .../alfa/vorgang/VorgangController.java | 18 ++++++++++--- .../alfa/vorgang/VorgangRemoteService.java | 27 ++++++++++++++++--- .../statistic/StatisticRemoteServiceTest.java | 10 +++---- pom.xml | 2 +- 7 files changed, 63 insertions(+), 18 deletions(-) create mode 100644 alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/ResultPageRequestCriteria.java 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 a2cb6eede0..b39e471781 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 c80e8617af..89fe664537 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 0000000000..4b456efafc --- /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 0bbd400966..8d23095292 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 bb2d49e67b..5e18390867 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 c46fcf4d90..8306173ae9 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 4f00d84c16..63d83b82f4 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> -- GitLab