From 79c08ed7c963c3419fa7b7cc0d22185827feb7f3 Mon Sep 17 00:00:00 2001 From: "oleksandr.masliuk" Date: Wed, 19 Mar 2025 15:28:20 +0200 Subject: [PATCH] FINERACT-2169: Apply dto in SearchApiResource --- .../portfolio/search/data/SearchData.java | 46 +------------------ .../search/api/SearchApiResource.java | 35 +++----------- .../search/api/SearchApiResourceSwagger.java | 16 ------- .../search/data/AdHocSearchQueryData.java | 2 + .../service/SearchReadPlatformService.java | 6 +-- .../SearchReadPlatformServiceImpl.java | 5 +- 6 files changed, 17 insertions(+), 93 deletions(-) diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/search/data/SearchData.java b/fineract-core/src/main/java/org/apache/fineract/portfolio/search/data/SearchData.java index 426a8b453..0438156f7 100644 --- a/fineract-core/src/main/java/org/apache/fineract/portfolio/search/data/SearchData.java +++ b/fineract-core/src/main/java/org/apache/fineract/portfolio/search/data/SearchData.java @@ -18,8 +18,10 @@ */ package org.apache.fineract.portfolio.search.data; +import lombok.Getter; import org.apache.fineract.infrastructure.core.data.EnumOptionData; +@Getter public class SearchData { private final Long entityId; @@ -51,48 +53,4 @@ public class SearchData { this.subEntityType = subEntityType; } - public Long getEntityId() { - return this.entityId; - } - - public String getEntityAccountNo() { - return this.entityAccountNo; - } - - public String getEntityExternalId() { - return this.entityExternalId; - } - - public String getEntityName() { - return this.entityName; - } - - public String getEntityType() { - return this.entityType; - } - - public Long getParentId() { - return this.parentId; - } - - public String getParentName() { - return this.parentName; - } - - public String getParentType() { - return this.parentType; - } - - public String getEntityMobileNo() { - return this.entityMobileNo; - } - - public EnumOptionData getEntityStatus() { - return this.entityStatus; - } - - public String getSubEntityType() { - return this.subEntityType; - } - } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/api/SearchApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/api/SearchApiResource.java index a57f015ca..1588e8dd7 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/api/SearchApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/api/SearchApiResource.java @@ -34,15 +34,10 @@ import jakarta.ws.rs.POST; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.QueryParam; -import jakarta.ws.rs.core.Context; import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.UriInfo; -import java.util.Collection; +import java.util.List; import java.util.Set; import lombok.RequiredArgsConstructor; -import org.apache.fineract.infrastructure.core.api.ApiRequestParameterHelper; -import org.apache.fineract.infrastructure.core.serialization.ApiRequestJsonSerializationSettings; -import org.apache.fineract.infrastructure.core.serialization.ToApiJsonSerializer; import org.apache.fineract.portfolio.search.SearchConstants.SearchResponseParameters; import org.apache.fineract.portfolio.search.data.AdHocQueryDataValidator; import org.apache.fineract.portfolio.search.data.AdHocQuerySearchConditions; @@ -61,8 +56,6 @@ public class SearchApiResource { private static final Set SEARCH_RESPONSE_PARAMETERS = SearchResponseParameters.getAllValues(); private final SearchReadPlatformService searchReadPlatformService; - private final ToApiJsonSerializer toApiJsonSerializer; - private final ApiRequestParameterHelper apiRequestParameterHelper; private final AdHocQueryDataValidator fromApiJsonDeserializer; @GET @@ -70,14 +63,9 @@ public class SearchApiResource { @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) @Operation(summary = "Retrive Adhoc Search query template", description = "Mandatory Fields\n" + "\n" + "search?query=000000001\n") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = SearchApiResourceSwagger.GetSearchResponse.class))) }) - public String retrieveAdHocSearchQueryTemplate(@Context final UriInfo uriInfo) { + public AdHocSearchQueryData retrieveAdHocSearchQueryTemplate() { - final AdHocSearchQueryData templateData = this.searchReadPlatformService.retrieveAdHocQueryTemplate(); - - final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); - return this.toApiJsonSerializer.serialize(settings, templateData); + return this.searchReadPlatformService.retrieveAdHocQueryTemplate(); } @GET @@ -87,16 +75,13 @@ public class SearchApiResource { + "search?query=Petra&resource=clients,groups\n" + "\n" + "\n" + "search?query=Petra&resource=clients,groups&exactMatch=true") @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(array = @ArraySchema(schema = @Schema(implementation = SearchApiResourceSwagger.GetSearchResponse.class)))) }) - public String searchData(@Context final UriInfo uriInfo, @QueryParam("query") @Parameter(description = "query") final String query, + public List searchData(@QueryParam("query") @Parameter(description = "query") final String query, @QueryParam("resource") @Parameter(description = "resource") final String resource, @DefaultValue("false") @QueryParam("exactMatch") @Parameter(description = "exactMatch") Boolean exactMatch) { final SearchConditions searchConditions = new SearchConditions(query, resource, exactMatch); - final Collection searchResults = this.searchReadPlatformService.retriveMatchingData(searchConditions); - - final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); - return this.toApiJsonSerializer.serialize(settings, searchResults, SEARCH_RESPONSE_PARAMETERS); + return this.searchReadPlatformService.retriveMatchingData(searchConditions); } @POST @@ -111,16 +96,10 @@ public class SearchApiResource { + "includeOutstandingAmount, outstandingAmountCondition, \n" + "minOutstandingAmount and maxOutstandingAmount OR outstandingAmount") @RequestBody(required = true, content = @Content(schema = @Schema(implementation = SearchApiResourceSwagger.PostAdhocQuerySearchRequest.class))) - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(array = @ArraySchema(schema = @Schema(implementation = SearchApiResourceSwagger.PostAdhocQuerySearchResponse.class)))) }) - public String advancedSearch(@Context final UriInfo uriInfo, final String json) { + public List advancedSearch(final String json) { final AdHocQuerySearchConditions searchConditions = this.fromApiJsonDeserializer.retrieveSearchConditions(json); - final Collection searchResults = this.searchReadPlatformService - .retrieveAdHocQueryMatchingData(searchConditions); - - final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); - return this.toApiJsonSerializer.serialize(settings, searchResults); + return this.searchReadPlatformService.retrieveAdHocQueryMatchingData(searchConditions); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/api/SearchApiResourceSwagger.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/api/SearchApiResourceSwagger.java index 87894081a..138a89d85 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/api/SearchApiResourceSwagger.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/api/SearchApiResourceSwagger.java @@ -88,20 +88,4 @@ final class SearchApiResourceSwagger { public Long maxOutstandingAmount; } - @Schema(description = "PostAdhocQuerySearchResponse") - public static final class PostAdhocQuerySearchResponse { - - private PostAdhocQuerySearchResponse() { - - } - - @Schema(example = "HFC") - public String officeName; - @Schema(example = "01 BC3M") - public String loanProductName; - @Schema(example = " 5692.41") - public Long loanOutStanding; - @Schema(example = "76.4") - public Long percentage; - } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/data/AdHocSearchQueryData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/data/AdHocSearchQueryData.java index 5c3c1fa48..7be2823fd 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/data/AdHocSearchQueryData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/data/AdHocSearchQueryData.java @@ -20,9 +20,11 @@ package org.apache.fineract.portfolio.search.data; import java.math.BigDecimal; import java.util.Collection; +import lombok.Getter; import org.apache.fineract.organisation.office.data.OfficeData; import org.apache.fineract.portfolio.loanproduct.data.LoanProductData; +@Getter public final class AdHocSearchQueryData { @SuppressWarnings("unused") diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/service/SearchReadPlatformService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/service/SearchReadPlatformService.java index d5882a318..c64155d78 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/service/SearchReadPlatformService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/service/SearchReadPlatformService.java @@ -18,7 +18,7 @@ */ package org.apache.fineract.portfolio.search.service; -import java.util.Collection; +import java.util.List; import org.apache.fineract.portfolio.search.data.AdHocQuerySearchConditions; import org.apache.fineract.portfolio.search.data.AdHocSearchQueryData; import org.apache.fineract.portfolio.search.data.SearchConditions; @@ -26,9 +26,9 @@ import org.apache.fineract.portfolio.search.data.SearchData; public interface SearchReadPlatformService { - Collection retriveMatchingData(SearchConditions searchConditions); + List retriveMatchingData(SearchConditions searchConditions); AdHocSearchQueryData retrieveAdHocQueryTemplate(); - Collection retrieveAdHocQueryMatchingData(AdHocQuerySearchConditions searchConditions); + List retrieveAdHocQueryMatchingData(AdHocQuerySearchConditions searchConditions); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/service/SearchReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/service/SearchReadPlatformServiceImpl.java index 5c5a0642c..e04b3226b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/service/SearchReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/search/service/SearchReadPlatformServiceImpl.java @@ -22,6 +22,7 @@ import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Collection; +import java.util.List; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.apache.fineract.infrastructure.core.data.EnumOptionData; @@ -58,7 +59,7 @@ public class SearchReadPlatformServiceImpl implements SearchReadPlatformService private final DatabaseSpecificSQLGenerator sqlGenerator; @Override - public Collection retriveMatchingData(final SearchConditions searchConditions) { + public List retriveMatchingData(final SearchConditions searchConditions) { final AppUser currentUser = context.authenticatedUser(); final String hierarchy = currentUser.getOffice().getHierarchy(); @@ -194,7 +195,7 @@ public class SearchReadPlatformServiceImpl implements SearchReadPlatformService } @Override - public Collection retrieveAdHocQueryMatchingData(final AdHocQuerySearchConditions searchConditions) { + public List retrieveAdHocQueryMatchingData(final AdHocQuerySearchConditions searchConditions) { context.authenticatedUser();