FINERACT-2169: refactoring FloatingRatesApiResource - update swagger docs

This commit is contained in:
oleksandr.masliuk
2025-03-26 10:01:45 +01:00
committed by Adam Saghy
parent 7dd058b5f1
commit f73b352727
4 changed files with 17 additions and 163 deletions
@@ -35,10 +35,7 @@ import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam; import jakarta.ws.rs.PathParam;
import jakarta.ws.rs.Produces; import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.MediaType;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.fineract.commands.domain.CommandWrapper; import org.apache.fineract.commands.domain.CommandWrapper;
import org.apache.fineract.commands.service.CommandWrapperBuilder; import org.apache.fineract.commands.service.CommandWrapperBuilder;
@@ -58,10 +55,6 @@ import org.springframework.stereotype.Component;
public class FloatingRatesApiResource { public class FloatingRatesApiResource {
private static final String RESOURCE_NAME = "FLOATINGRATE"; private static final String RESOURCE_NAME = "FLOATINGRATE";
private static final Set<String> LIST_FLOATING_RATES_PARAMETERS = new HashSet<>(
Arrays.asList("id", "name", "isBaseLendingRate", "isActive", "createdby", "createdOn", "modifiedBy", "modifiedOn"));
private static final Set<String> INDIVIDUAL_FLOATING_RATES_PARAMETERS = new HashSet<>(Arrays.asList("id", "name", "isBaseLendingRate",
"isActive", "createdBy", "createdOn", "modifiedBy", "modifiedOn", "ratePeriods"));
private final PlatformSecurityContext context; private final PlatformSecurityContext context;
private final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService; private final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService;
private final DefaultToApiJsonSerializer<FloatingRateData> toApiJsonSerializer; private final DefaultToApiJsonSerializer<FloatingRateData> toApiJsonSerializer;
@@ -72,7 +65,7 @@ public class FloatingRatesApiResource {
@Produces({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON })
@Operation(summary = "Create a new Floating Rate", description = "Creates a new Floating Rate\n" + "Mandatory Fields: name\n" @Operation(summary = "Create a new Floating Rate", description = "Creates a new Floating Rate\n" + "Mandatory Fields: name\n"
+ "Optional Fields: isBaseLendingRate, isActive, ratePeriods") + "Optional Fields: isBaseLendingRate, isActive, ratePeriods")
@RequestBody(required = true, content = @Content(schema = @Schema(implementation = FloatingRatesApiResourceSwagger.PostFloatingRatesRequest.class))) @RequestBody(required = true, content = @Content(schema = @Schema(implementation = FloatingRateRequest.class)))
@ApiResponses({ @ApiResponses({
@ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = FloatingRatesApiResourceSwagger.PostFloatingRatesResponse.class))) }) @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = FloatingRatesApiResourceSwagger.PostFloatingRatesResponse.class))) })
public CommandProcessingResult createFloatingRate(@Parameter(hidden = true) final FloatingRateRequest floatingRateRequest) { public CommandProcessingResult createFloatingRate(@Parameter(hidden = true) final FloatingRateRequest floatingRateRequest) {
@@ -97,8 +90,6 @@ public class FloatingRatesApiResource {
@Consumes({ MediaType.APPLICATION_JSON }) @Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON })
@Operation(summary = "Retrieve Floating Rate", description = "Retrieves Floating Rate") @Operation(summary = "Retrieve Floating Rate", description = "Retrieves Floating Rate")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = FloatingRatesApiResourceSwagger.GetFloatingRatesFloatingRateIdResponse.class))) })
public FloatingRateData retrieveOne(@PathParam("floatingRateId") @Parameter(description = "floatingRateId") final Long floatingRateId) { public FloatingRateData retrieveOne(@PathParam("floatingRateId") @Parameter(description = "floatingRateId") final Long floatingRateId) {
this.context.authenticatedUser().validateHasReadPermission(RESOURCE_NAME); this.context.authenticatedUser().validateHasReadPermission(RESOURCE_NAME);
return floatingRatesReadPlatformService.retrieveOne(floatingRateId); return floatingRatesReadPlatformService.retrieveOne(floatingRateId);
@@ -109,7 +100,7 @@ public class FloatingRatesApiResource {
@Consumes({ MediaType.APPLICATION_JSON }) @Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON })
@Operation(summary = "Update Floating Rate", description = "Updates new Floating Rate. Rate Periods in the past cannot be modified. All the future rateperiods would be replaced with the new ratePeriods data sent.") @Operation(summary = "Update Floating Rate", description = "Updates new Floating Rate. Rate Periods in the past cannot be modified. All the future rateperiods would be replaced with the new ratePeriods data sent.")
@RequestBody(required = true, content = @Content(schema = @Schema(implementation = FloatingRatesApiResourceSwagger.PutFloatingRatesFloatingRateIdRequest.class))) @RequestBody(required = true, content = @Content(schema = @Schema(implementation = FloatingRateRequest.class)))
@ApiResponses({ @ApiResponses({
@ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = FloatingRatesApiResourceSwagger.PutFloatingRatesFloatingRateIdResponse.class))) }) @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = FloatingRatesApiResourceSwagger.PutFloatingRatesFloatingRateIdResponse.class))) })
public CommandProcessingResult updateFloatingRate( public CommandProcessingResult updateFloatingRate(
@@ -88,68 +88,6 @@ final class FloatingRatesApiResourceSwagger {
public String modifiedOn; public String modifiedOn;
} }
@Schema(description = "GetFloatingRatesFloatingRateIdResponse")
public static final class GetFloatingRatesFloatingRateIdResponse {
private GetFloatingRatesFloatingRateIdResponse() {}
static final class GetFloatingRatesRatePeriods {
private GetFloatingRatesRatePeriods() {}
@Schema(example = "1")
public Long id;
@Schema(example = "Dec 15, 2015")
public String fromDate;
@Schema(example = "11")
public Double interestRate;
@Schema(example = "false")
public Boolean isDifferentialToBaseLendingRate;
@Schema(example = "true")
public Boolean isActive;
@Schema(example = "mifos")
public String createdBy;
@Schema(example = "Nov 18, 2015")
public String createdOn;
@Schema(example = "mifos")
public String modifiedBy;
@Schema(example = "Nov 18, 2015")
public String modifiedOn;
}
@Schema(example = "1")
public Long id;
@Schema(example = "Floating Rate 1")
public String name;
@Schema(example = "true")
public Boolean isBaseLendingRate;
@Schema(example = "true")
public Boolean isActive;
@Schema(example = "mifos")
public String createdBy;
@Schema(example = "Nov 18, 2015")
public String createdOn;
@Schema(example = "mifos")
public String modifiedBy;
@Schema(example = "Nov 18, 2015")
public String modifiedOn;
public Set<GetFloatingRatesRatePeriods> ratePeriods;
}
@Schema(description = "PutFloatingRatesFloatingRateIdRequest")
public static final class PutFloatingRatesFloatingRateIdRequest {
private PutFloatingRatesFloatingRateIdRequest() {}
@Schema(example = "Floating Rate 1")
public String name;
@Schema(example = "true")
public Boolean isBaseLendingRate;
@Schema(example = "true")
public Boolean isActive;
public Set<PostFloatingRatesRequest.PostFloatingRatesRatePeriods> ratePeriods;
}
@Schema(description = "PutFloatingRatesFloatingRateIdResponse") @Schema(description = "PutFloatingRatesFloatingRateIdResponse")
public static final class PutFloatingRatesFloatingRateIdResponse { public static final class PutFloatingRatesFloatingRateIdResponse {
@@ -18,34 +18,30 @@
*/ */
package org.apache.fineract.portfolio.floatingrates.data; 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.io.Serializable;
import java.time.OffsetDateTime; import java.time.OffsetDateTime;
import java.util.List; import java.util.List;
import lombok.Getter;
import org.apache.commons.lang3.builder.CompareToBuilder; import org.apache.commons.lang3.builder.CompareToBuilder;
import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.core.data.EnumOptionData;
@JsonInclude(JsonInclude.Include.NON_NULL) @Getter
public class FloatingRateData implements Comparable<FloatingRateData>, Serializable { public class FloatingRateData implements Comparable<FloatingRateData>, Serializable {
private final Long id; private final Long id;
private final String name; private final String name;
@JsonProperty("isBaseLendingRate") private final Boolean isBaseLendingRate;
private final boolean isBaseLendingRate; private final Boolean isActive;
@JsonProperty("isActive")
private final boolean isActive;
private final String createdBy; private final String createdBy;
private final OffsetDateTime createdOn; private final OffsetDateTime createdOn;
private final String modifiedBy; private final String modifiedBy;
private final OffsetDateTime modifiedOn; private final OffsetDateTime modifiedOn;
private final List<FloatingRatePeriodData> ratePeriods; private final List<FloatingRatePeriodData> ratePeriods;
@SuppressWarnings("unused")
private final List<EnumOptionData> interestRateFrequencyTypeOptions; private final List<EnumOptionData> interestRateFrequencyTypeOptions;
public FloatingRateData(Long id, String name, boolean isBaseLendingRate, boolean isActive, String createdBy, OffsetDateTime createdOn, public FloatingRateData(Long id, String name, Boolean isBaseLendingRate, Boolean isActive, String createdBy, OffsetDateTime createdOn,
String modifiedBy, OffsetDateTime modifiedOn, List<FloatingRatePeriodData> ratePeriods, String modifiedBy, OffsetDateTime modifiedOn, List<FloatingRatePeriodData> ratePeriods,
List<EnumOptionData> interestRateFrequencyTypeOptions) { List<EnumOptionData> interestRateFrequencyTypeOptions) {
this.id = id; this.id = id;
@@ -60,42 +56,6 @@ public class FloatingRateData implements Comparable<FloatingRateData>, Serializa
this.interestRateFrequencyTypeOptions = interestRateFrequencyTypeOptions; this.interestRateFrequencyTypeOptions = interestRateFrequencyTypeOptions;
} }
public Long getId() {
return this.id;
}
public String getName() {
return this.name;
}
public boolean isBaseLendingRate() {
return this.isBaseLendingRate;
}
public boolean isActive() {
return this.isActive;
}
public String getCreatedBy() {
return this.createdBy;
}
public OffsetDateTime getCreatedOn() {
return this.createdOn;
}
public String getModifiedBy() {
return this.modifiedBy;
}
public OffsetDateTime getModifiedOn() {
return this.modifiedOn;
}
public List<FloatingRatePeriodData> getRatePeriods() {
return this.ratePeriods;
}
@Override @Override
public int compareTo(final FloatingRateData obj) { public int compareTo(final FloatingRateData obj) {
if (obj == null) { if (obj == null) {
@@ -18,33 +18,33 @@
*/ */
package org.apache.fineract.portfolio.floatingrates.data; package org.apache.fineract.portfolio.floatingrates.data;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.OffsetDateTime; import java.time.OffsetDateTime;
import lombok.Getter;
import org.apache.commons.lang3.builder.CompareToBuilder; import org.apache.commons.lang3.builder.CompareToBuilder;
import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder;
@Getter
@JsonInclude(JsonInclude.Include.NON_NULL) @JsonInclude(JsonInclude.Include.NON_NULL)
public class FloatingRatePeriodData implements Comparable<FloatingRatePeriodData>, Serializable { public class FloatingRatePeriodData implements Comparable<FloatingRatePeriodData>, Serializable {
private Long id; private Long id;
private LocalDate fromDate; private LocalDate fromDate;
private BigDecimal interestRate; private BigDecimal interestRate;
@JsonProperty("isDifferentialToBaseLendingRate") private Boolean isDifferentialToBaseLendingRate;
private boolean isDifferentialToBaseLendingRate; private Boolean isActive;
@JsonProperty("isActive")
private boolean isActive;
private String createdBy; private String createdBy;
private OffsetDateTime createdOn; private OffsetDateTime createdOn;
private String modifiedBy; private String modifiedBy;
private OffsetDateTime modifiedOn; private OffsetDateTime modifiedOn;
public FloatingRatePeriodData(Long id, LocalDate fromDate, BigDecimal interestRate, boolean isDifferentialToBaseLendingRate, public FloatingRatePeriodData(Long id, LocalDate fromDate, BigDecimal interestRate, Boolean isDifferentialToBaseLendingRate,
boolean isActive, String createdBy, OffsetDateTime createdOn, String modifiedBy, OffsetDateTime modifiedOn) { Boolean isActive, String createdBy, OffsetDateTime createdOn, String modifiedBy, OffsetDateTime modifiedOn) {
this.id = id; this.id = id;
this.fromDate = fromDate; this.fromDate = fromDate;
this.interestRate = interestRate; this.interestRate = interestRate;
@@ -56,8 +56,8 @@ public class FloatingRatePeriodData implements Comparable<FloatingRatePeriodData
this.modifiedOn = modifiedOn; this.modifiedOn = modifiedOn;
} }
public FloatingRatePeriodData(Long id, LocalDate fromDate, BigDecimal interestRate, boolean isDifferentialToBaseLendingRate, public FloatingRatePeriodData(Long id, LocalDate fromDate, BigDecimal interestRate, Boolean isDifferentialToBaseLendingRate,
boolean isActive) { Boolean isActive) {
this.id = id; this.id = id;
this.fromDate = fromDate; this.fromDate = fromDate;
this.interestRate = interestRate; this.interestRate = interestRate;
@@ -65,46 +65,11 @@ public class FloatingRatePeriodData implements Comparable<FloatingRatePeriodData
this.isActive = isActive; this.isActive = isActive;
} }
public Long getId() { @JsonIgnore
return this.id;
}
public LocalDate getFromDate() {
return this.fromDate;
}
public LocalDate getFromDateAsLocalDate() { public LocalDate getFromDateAsLocalDate() {
return this.fromDate; return this.fromDate;
} }
public BigDecimal getInterestRate() {
return this.interestRate;
}
public boolean isDifferentialToBaseLendingRate() {
return this.isDifferentialToBaseLendingRate;
}
public boolean isActive() {
return this.isActive;
}
public String getCreatedBy() {
return this.createdBy;
}
public OffsetDateTime getCreatedOn() {
return this.createdOn;
}
public String getModifiedBy() {
return this.modifiedBy;
}
public OffsetDateTime getModifiedOn() {
return this.modifiedOn;
}
@Override @Override
public int compareTo(final FloatingRatePeriodData obj) { public int compareTo(final FloatingRatePeriodData obj) {
if (obj == null) { if (obj == null) {