FINERACT-2169: Apply dto in SearchApiResource

This commit is contained in:
oleksandr.masliuk
2025-03-26 10:03:19 +01:00
committed by Adam Saghy
parent f73b352727
commit 79c08ed7c9
6 changed files with 17 additions and 93 deletions
@@ -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;
}
}
@@ -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<String> SEARCH_RESPONSE_PARAMETERS = SearchResponseParameters.getAllValues();
private final SearchReadPlatformService searchReadPlatformService;
private final ToApiJsonSerializer<Object> 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> 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<SearchData> 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<AdHocSearchQueryData> advancedSearch(final String json) {
final AdHocQuerySearchConditions searchConditions = this.fromApiJsonDeserializer.retrieveSearchConditions(json);
final Collection<AdHocSearchQueryData> searchResults = this.searchReadPlatformService
.retrieveAdHocQueryMatchingData(searchConditions);
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
return this.toApiJsonSerializer.serialize(settings, searchResults);
return this.searchReadPlatformService.retrieveAdHocQueryMatchingData(searchConditions);
}
}
@@ -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;
}
}
@@ -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")
@@ -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<SearchData> retriveMatchingData(SearchConditions searchConditions);
List<SearchData> retriveMatchingData(SearchConditions searchConditions);
AdHocSearchQueryData retrieveAdHocQueryTemplate();
Collection<AdHocSearchQueryData> retrieveAdHocQueryMatchingData(AdHocQuerySearchConditions searchConditions);
List<AdHocSearchQueryData> retrieveAdHocQueryMatchingData(AdHocQuerySearchConditions searchConditions);
}
@@ -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<SearchData> retriveMatchingData(final SearchConditions searchConditions) {
public List<SearchData> 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<AdHocSearchQueryData> retrieveAdHocQueryMatchingData(final AdHocQuerySearchConditions searchConditions) {
public List<AdHocSearchQueryData> retrieveAdHocQueryMatchingData(final AdHocQuerySearchConditions searchConditions) {
context.authenticatedUser();