From d9bb820cc655827634d8e4686e4252b8b9accbc2 Mon Sep 17 00:00:00 2001 From: "oleksandr.masliuk" Date: Fri, 14 Feb 2025 13:57:58 +0200 Subject: [PATCH] FINERACT-2169: Replace String json to DTO in FloatingRatesApiResource - fixed --- .../api/FloatingRatesApiResource.java | 41 +++++++----------- .../floatingrates/data/FloatingRateData.java | 5 +++ .../data/FloatingRatePeriodData.java | 5 +++ .../data/FloatingRatePeriodRequest.java | 42 +++++++++++++++++++ .../data/FloatingRateRequest.java | 41 ++++++++++++++++++ 5 files changed, 109 insertions(+), 25 deletions(-) create mode 100644 fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRatePeriodRequest.java create mode 100644 fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateRequest.java diff --git a/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/api/FloatingRatesApiResource.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/api/FloatingRatesApiResource.java index d10280951..19c2adc88 100644 --- a/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/api/FloatingRatesApiResource.java +++ b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/api/FloatingRatesApiResource.java @@ -34,9 +34,7 @@ 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.HashSet; import java.util.List; @@ -45,12 +43,11 @@ 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.floatingrates.data.FloatingRateData; +import org.apache.fineract.portfolio.floatingrates.data.FloatingRateRequest; import org.apache.fineract.portfolio.floatingrates.service.FloatingRatesReadPlatformService; import org.springframework.stereotype.Component; @@ -69,7 +66,6 @@ public class FloatingRatesApiResource { private final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService; private final DefaultToApiJsonSerializer toApiJsonSerializer; private final FloatingRatesReadPlatformService floatingRatesReadPlatformService; - private final ApiRequestParameterHelper apiRequestParameterHelper; @POST @Consumes({ MediaType.APPLICATION_JSON }) @@ -79,11 +75,10 @@ public class FloatingRatesApiResource { @RequestBody(required = true, content = @Content(schema = @Schema(implementation = FloatingRatesApiResourceSwagger.PostFloatingRatesRequest.class))) @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = FloatingRatesApiResourceSwagger.PostFloatingRatesResponse.class))) }) - public String createFloatingRate(@Parameter(hidden = true) final String apiRequestBodyAsJson) { - - final CommandWrapper commandRequest = new CommandWrapperBuilder().createFloatingRate().withJson(apiRequestBodyAsJson).build(); - final CommandProcessingResult result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest); - return this.toApiJsonSerializer.serialize(result); + public CommandProcessingResult createFloatingRate(@Parameter(hidden = true) final FloatingRateRequest floatingRateRequest) { + final CommandWrapper commandRequest = new CommandWrapperBuilder().createFloatingRate() + .withJson(toApiJsonSerializer.serialize(floatingRateRequest)).build(); + return commandsSourceWritePlatformService.logCommandSource(commandRequest); } @GET @@ -92,11 +87,9 @@ public class FloatingRatesApiResource { @Operation(summary = "List Floating Rates", description = "Lists Floating Rates") @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(array = @ArraySchema(schema = @Schema(implementation = FloatingRatesApiResourceSwagger.GetFloatingRatesResponse.class)))) }) - public String retrieveAll(@Context final UriInfo uriInfo) { + public List retrieveAll() { this.context.authenticatedUser().validateHasReadPermission(RESOURCE_NAME); - final List floatingRates = this.floatingRatesReadPlatformService.retrieveAll(); - final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); - return this.toApiJsonSerializer.serialize(settings, floatingRates, FloatingRatesApiResource.LIST_FLOATING_RATES_PARAMETERS); + return floatingRatesReadPlatformService.retrieveAll(); } @GET @@ -106,12 +99,9 @@ public class FloatingRatesApiResource { @Operation(summary = "Retrieve Floating Rate", description = "Retrieves Floating Rate") @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = FloatingRatesApiResourceSwagger.GetFloatingRatesFloatingRateIdResponse.class))) }) - public String retrieveOne(@PathParam("floatingRateId") @Parameter(description = "floatingRateId") final Long floatingRateId, - @Context final UriInfo uriInfo) { + public FloatingRateData retrieveOne(@PathParam("floatingRateId") @Parameter(description = "floatingRateId") final Long floatingRateId) { this.context.authenticatedUser().validateHasReadPermission(RESOURCE_NAME); - final FloatingRateData floatingRates = this.floatingRatesReadPlatformService.retrieveOne(floatingRateId); - final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); - return this.toApiJsonSerializer.serialize(settings, floatingRates, FloatingRatesApiResource.INDIVIDUAL_FLOATING_RATES_PARAMETERS); + return floatingRatesReadPlatformService.retrieveOne(floatingRateId); } @PUT @@ -122,12 +112,13 @@ public class FloatingRatesApiResource { @RequestBody(required = true, content = @Content(schema = @Schema(implementation = FloatingRatesApiResourceSwagger.PutFloatingRatesFloatingRateIdRequest.class))) @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = FloatingRatesApiResourceSwagger.PutFloatingRatesFloatingRateIdResponse.class))) }) - public String updateFloatingRate(@PathParam("floatingRateId") @Parameter(description = "floatingRateId") final Long floatingRateId, - @Parameter(hidden = true) final String apiRequestBodyAsJson) { - final CommandWrapper commandRequest = new CommandWrapperBuilder().updateFloatingRate(floatingRateId).withJson(apiRequestBodyAsJson) - .build(); - final CommandProcessingResult result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest); - return this.toApiJsonSerializer.serialize(result); + public CommandProcessingResult updateFloatingRate( + @PathParam("floatingRateId") @Parameter(description = "floatingRateId") final Long floatingRateId, + @Parameter(hidden = true) final FloatingRateRequest floatingRateRequest) { + final CommandWrapper commandRequest = new CommandWrapperBuilder().updateFloatingRate(floatingRateId) + .withJson(toApiJsonSerializer.serialize(floatingRateRequest)).build(); + + return commandsSourceWritePlatformService.logCommandSource(commandRequest); } } diff --git a/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateData.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateData.java index f443a9d93..c85dc50d2 100644 --- a/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateData.java +++ b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateData.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.portfolio.floatingrates.data; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; import java.io.Serializable; import java.time.OffsetDateTime; import java.util.List; @@ -26,11 +28,14 @@ import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apache.fineract.infrastructure.core.data.EnumOptionData; +@JsonInclude(JsonInclude.Include.NON_NULL) public class FloatingRateData implements Comparable, Serializable { private final Long id; private final String name; + @JsonProperty("isBaseLendingRate") private final boolean isBaseLendingRate; + @JsonProperty("isActive") private final boolean isActive; private final String createdBy; private final OffsetDateTime createdOn; diff --git a/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRatePeriodData.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRatePeriodData.java index 93516f1a9..14d6c1c53 100644 --- a/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRatePeriodData.java +++ b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRatePeriodData.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.portfolio.floatingrates.data; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDate; @@ -26,12 +28,15 @@ import org.apache.commons.lang3.builder.CompareToBuilder; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; +@JsonInclude(JsonInclude.Include.NON_NULL) public class FloatingRatePeriodData implements Comparable, Serializable { private Long id; private LocalDate fromDate; private BigDecimal interestRate; + @JsonProperty("isDifferentialToBaseLendingRate") private boolean isDifferentialToBaseLendingRate; + @JsonProperty("isActive") private boolean isActive; private String createdBy; private OffsetDateTime createdOn; diff --git a/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRatePeriodRequest.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRatePeriodRequest.java new file mode 100644 index 000000000..73e9b58d6 --- /dev/null +++ b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRatePeriodRequest.java @@ -0,0 +1,42 @@ +/** + * 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.floatingrates.data; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class FloatingRatePeriodRequest implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private String fromDate; + private BigDecimal interestRate; + private Boolean isDifferentialToBaseLendingRate; + private String locale; + private String dateFormat; + +} diff --git a/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateRequest.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateRequest.java new file mode 100644 index 000000000..12434d414 --- /dev/null +++ b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateRequest.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.floatingrates.data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class FloatingRateRequest implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private String name; + private Boolean isBaseLendingRate; + private Boolean isActive; + private List ratePeriods; + +}