From 1fb5e3da43a8853d112ff75ef0cc5b6b35bddb0a Mon Sep 17 00:00:00 2001 From: "oleksandr.masliuk" Date: Fri, 7 Mar 2025 17:52:55 +0200 Subject: [PATCH] FINERACT-2169: Apply DTO instead String json in RateApiResource --- .../portfolio/rate/api/RateApiResource.java | 42 ++++++------------- .../portfolio/rate/api/RateRequest.java | 41 ++++++++++++++++++ .../rate/service/RateReadService.java | 5 +-- .../rate/service/RateReadServiceImpl.java | 5 +-- 4 files changed, 58 insertions(+), 35 deletions(-) create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/api/RateRequest.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/api/RateApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/api/RateApiResource.java index 97f09d9ec..200cdaf81 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/api/RateApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/api/RateApiResource.java @@ -27,20 +27,16 @@ import jakarta.ws.rs.PUT; import jakarta.ws.rs.Path; import jakarta.ws.rs.PathParam; import jakarta.ws.rs.Produces; -import jakarta.ws.rs.core.Context; import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.UriInfo; import java.util.Arrays; -import java.util.Collection; import java.util.HashSet; +import java.util.List; import java.util.Set; import lombok.RequiredArgsConstructor; import org.apache.fineract.commands.domain.CommandWrapper; import org.apache.fineract.commands.service.CommandWrapperBuilder; import org.apache.fineract.commands.service.PortfolioCommandSourceWritePlatformService; -import org.apache.fineract.infrastructure.core.api.ApiRequestParameterHelper; import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; -import org.apache.fineract.infrastructure.core.serialization.ApiRequestJsonSerializationSettings; import org.apache.fineract.infrastructure.core.serialization.DefaultToApiJsonSerializer; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.portfolio.rate.data.RateData; @@ -63,60 +59,48 @@ public class RateApiResource { private final PlatformSecurityContext context; private final RateReadService readPlatformService; private final DefaultToApiJsonSerializer toApiJsonSerializer; - private final ApiRequestParameterHelper apiRequestParameterHelper; private final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService; @GET @Path("{rateId}") @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) - public String retrieveRate(@PathParam("rateId") Long rateId, @Context final UriInfo uriInfo) { + public RateData retrieveRate(@PathParam("rateId") Long rateId) { this.context.authenticatedUser().validateHasReadPermission(RESOURCE_NAME_FOR_PERMISSIONS); - final RateData rate = this.readPlatformService.retrieveOne(rateId); - - final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); - - return this.toApiJsonSerializer.serialize(settings, rate, RESPONSE_DATA_PARAMETERS); + return this.readPlatformService.retrieveOne(rateId); } @POST @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) - public String createRate(final String apiRequestBodyAsJson) { - final CommandWrapper commandRequest = new CommandWrapperBuilder().createRate().withJson(apiRequestBodyAsJson).build(); - - final CommandProcessingResult result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest); - - return this.toApiJsonSerializer.serialize(result); + public CommandProcessingResult createRate(final RateRequest rateRequest) { + final CommandWrapper commandRequest = new CommandWrapperBuilder().createRate().withJson(toApiJsonSerializer.serialize(rateRequest)) + .build(); + return commandsSourceWritePlatformService.logCommandSource(commandRequest); } @GET @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) - public String getAllRates(@Context final UriInfo uriInfo) { + public List getAllRates() { this.context.authenticatedUser().validateHasReadPermission(RESOURCE_NAME_FOR_PERMISSIONS); - Collection rates = this.readPlatformService.retrieveAllRates(); - - final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); - - return this.toApiJsonSerializer.serialize(settings, rates, RESPONSE_DATA_PARAMETERS); + return readPlatformService.retrieveAllRates(); } @PUT @Path("{rateId}") @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) - public String updateRate(@PathParam("rateId") Long rateId, final String apiRequestBodyAsJson) { - final CommandWrapper commandRequest = new CommandWrapperBuilder().updateRate(rateId).withJson(apiRequestBodyAsJson).build(); + public CommandProcessingResult updateRate(@PathParam("rateId") Long rateId, final RateRequest rateRequest) { + final CommandWrapper commandRequest = new CommandWrapperBuilder().updateRate(rateId) + .withJson(toApiJsonSerializer.serialize(rateRequest)).build(); - final CommandProcessingResult result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest); - - return this.toApiJsonSerializer.serialize(result); + return commandsSourceWritePlatformService.logCommandSource(commandRequest); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/api/RateRequest.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/api/RateRequest.java new file mode 100644 index 000000000..9b5a82769 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/api/RateRequest.java @@ -0,0 +1,41 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.fineract.portfolio.rate.api; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class RateRequest implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private String name; + private BigDecimal percentage; + private Integer productApply; + private Boolean active; + private String locale; +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/service/RateReadService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/service/RateReadService.java index 4455e4d19..7f624f914 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/service/RateReadService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/service/RateReadService.java @@ -18,7 +18,6 @@ */ package org.apache.fineract.portfolio.rate.service; -import java.util.Collection; import java.util.List; import org.apache.fineract.portfolio.rate.data.RateData; @@ -27,9 +26,9 @@ import org.apache.fineract.portfolio.rate.data.RateData; */ public interface RateReadService { - Collection retrieveAllRates(); + List retrieveAllRates(); - Collection retrieveLoanApplicableRates(); + List retrieveLoanApplicableRates(); RateData retrieveOne(Long rateId); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/service/RateReadServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/service/RateReadServiceImpl.java index f2f52a81f..9643621a9 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/service/RateReadServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/service/RateReadServiceImpl.java @@ -22,7 +22,6 @@ package org.apache.fineract.portfolio.rate.service; 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.fineract.infrastructure.core.data.EnumOptionData; @@ -44,7 +43,7 @@ public class RateReadServiceImpl implements RateReadService { private final PlatformSecurityContext context; @Override - public Collection retrieveAllRates() { + public List retrieveAllRates() { this.context.authenticatedUser(); final RateMapper rm = new RateMapper(); final String sql = "select " + rm.rateSchema(); @@ -80,7 +79,7 @@ public class RateReadServiceImpl implements RateReadService { } @Override - public Collection retrieveLoanApplicableRates() { + public List retrieveLoanApplicableRates() { this.context.authenticatedUser(); final RateMapper rm = new RateMapper(); final String sql = "select " + rm.rateSchema() + " where r.active = ? and product_apply=?";