From 1b9459b7b48b98ff55732122925394f78f2b1c1b Mon Sep 17 00:00:00 2001 From: viktorpavlenko Date: Wed, 26 Mar 2025 10:53:39 +0200 Subject: [PATCH] FINERACT-2169: Refactor field configuration api controller; --- .../EntityFieldConfigurationApiResource.java | 32 +--------- ...FieldConfigurationApiResourcesSwagger.java | 51 --------------- .../address/data/FieldConfigurationData.java | 63 ++----------------- ...AddressCommandFromApiJsonDeserializer.java | 16 +++-- ...FieldConfigurationReadPlatformService.java | 3 +- ...dConfigurationReadPlatformServiceImpl.java | 6 +- 6 files changed, 19 insertions(+), 152 deletions(-) delete mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/address/api/EntityFieldConfigurationApiResourcesSwagger.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/api/EntityFieldConfigurationApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/api/EntityFieldConfigurationApiResource.java index fda49f47d..0b80c8138 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/api/EntityFieldConfigurationApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/api/EntityFieldConfigurationApiResource.java @@ -20,28 +20,15 @@ package org.apache.fineract.portfolio.address.api; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.media.ArraySchema; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.ws.rs.Consumes; import jakarta.ws.rs.GET; 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.Set; +import java.util.List; 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.DefaultToApiJsonSerializer; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.portfolio.address.data.FieldConfigurationData; import org.apache.fineract.portfolio.address.service.FieldConfigurationReadPlatformService; @@ -55,30 +42,17 @@ import org.springframework.stereotype.Component; @RequiredArgsConstructor public class EntityFieldConfigurationApiResource { - private static final Set RESPONSE_DATA_PARAMETERS = new HashSet<>( - Arrays.asList("clientAddressId", "client_id", "address_id", "address_type_id", "isActive", "fieldConfigurationId", "entity", - "table", "field", "is_enabled", "is_mandatory", "validation_regex")); private static final String RESOURCE_NAME_FOR_PERMISSIONS = "Address"; private final PlatformSecurityContext context; private final FieldConfigurationReadPlatformService readPlatformServicefld; - private final DefaultToApiJsonSerializer toApiJsonSerializerfld; - private final ApiRequestParameterHelper apiRequestParameterHelper; @GET @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) @Operation(summary = "Retrieves the Entity Field Configuration", description = "It retrieves all the Entity Field Configuration") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(array = @ArraySchema(schema = @Schema(implementation = EntityFieldConfigurationApiResourcesSwagger.GetFieldConfigurationEntityResponse.class)))) }) - public String getAddresses(@PathParam("entity") @Parameter(description = "entity") final String entityname, - @Context final UriInfo uriInfo) { + public List getAddresses(@PathParam("entity") @Parameter(description = "entity") final String entityname) { this.context.authenticatedUser().validateHasReadPermission(RESOURCE_NAME_FOR_PERMISSIONS); - - final Collection fldconfig = this.readPlatformServicefld.retrieveFieldConfiguration(entityname); - - final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); - return this.toApiJsonSerializerfld.serialize(settings, fldconfig, RESPONSE_DATA_PARAMETERS); - + return this.readPlatformServicefld.retrieveFieldConfiguration(entityname); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/api/EntityFieldConfigurationApiResourcesSwagger.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/api/EntityFieldConfigurationApiResourcesSwagger.java deleted file mode 100644 index 73556ee52..000000000 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/api/EntityFieldConfigurationApiResourcesSwagger.java +++ /dev/null @@ -1,51 +0,0 @@ -/** - * 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.address.api; - -import io.swagger.v3.oas.annotations.media.Schema; - -/** - * Created by Chirag Gupta on 12/01/17. - */ -@SuppressWarnings({ "MemberName" }) -final class EntityFieldConfigurationApiResourcesSwagger { - - private EntityFieldConfigurationApiResourcesSwagger() {} - - @Schema(description = "GetFieldConfigurationEntityResponse") - public static final class GetFieldConfigurationEntityResponse { - - private GetFieldConfigurationEntityResponse() {} - - @Schema(example = "1") - public Long fieldConfigurationId; - @Schema(example = "ADDRESS") - public String entity; - @Schema(example = "CLIENT") - public String subentity; - @Schema(example = "addressType") - public String field; - @Schema(example = "true") - public String is_enabled; - @Schema(example = "false") - public String is_mandatory; - @Schema(example = " ") - public String validation_regex; - } -} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/data/FieldConfigurationData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/data/FieldConfigurationData.java index da5d4fe17..0d8b4dc3e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/data/FieldConfigurationData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/data/FieldConfigurationData.java @@ -18,64 +18,13 @@ */ package org.apache.fineract.portfolio.address.data; -public final class FieldConfigurationData { +import java.io.Serial; +import java.io.Serializable; - private final long fieldConfigurationId; +public record FieldConfigurationData(Long fieldConfigurationId, String entity, String subentity, String field, boolean isEnabled, + boolean isMandatory, String validationRegex) implements Serializable { - private final String entity; - - private final String subentity; - - private final String field; - - private final boolean isEnabled; - - private final boolean isMandatory; - - private final String validationRegex; - - private FieldConfigurationData(final long fieldConfigurationId, final String entity, final String subentity, final String field, - final boolean isEnabled, final boolean isMandatory, final String validationRegex) { - this.fieldConfigurationId = fieldConfigurationId; - this.entity = entity; - this.subentity = subentity; - this.field = field; - this.isEnabled = isEnabled; - this.isMandatory = isMandatory; - this.validationRegex = validationRegex; - } - - public static FieldConfigurationData instance(final long fieldConfigurationId, final String entity, final String subentity, - final String field, final boolean isEnabled, final boolean isMandatory, final String validationRegex) { - return new FieldConfigurationData(fieldConfigurationId, entity, subentity, field, isEnabled, isMandatory, validationRegex); - } - - public long getFieldConfigurationId() { - return this.fieldConfigurationId; - } - - public String getEntity() { - return this.entity; - } - - public String getSubEntity() { - return this.subentity; - } - - public String getField() { - return this.field; - } - - public boolean isEnabled() { - return this.isEnabled; - } - - public boolean isIs_mandatory() { - return this.isMandatory; - } - - public String getValidation_regex() { - return this.validationRegex; - } + @Serial + private static final long serialVersionUID = 1L; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/serialization/AddressCommandFromApiJsonDeserializer.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/serialization/AddressCommandFromApiJsonDeserializer.java index 8ed7301b0..0a00c7cae 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/serialization/AddressCommandFromApiJsonDeserializer.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/serialization/AddressCommandFromApiJsonDeserializer.java @@ -65,10 +65,9 @@ public class AddressCommandFromApiJsonDeserializer { final JsonElement element = this.fromApiJsonHelper.parse(json); final List configurationData = new ArrayList<>(this.readservice.retrieveFieldConfigurationList("ADDRESS")); // validate the json fields from the configuration data fields - final List configData = configurationData.stream().filter(FieldConfigurationData::isEnabled) - .collect(Collectors.toList()); + final List configData = configurationData.stream().filter(FieldConfigurationData::isEnabled).toList(); - final Set supportedParameters = configData.stream().map(FieldConfigurationData::getField).collect(Collectors.toSet()); + final Set supportedParameters = configData.stream().map(FieldConfigurationData::field).collect(Collectors.toSet()); supportedParameters.add("locale"); supportedParameters.add("dateFormat"); @@ -77,20 +76,19 @@ public class AddressCommandFromApiJsonDeserializer { this.fromApiJsonHelper.checkForUnsupportedParameters(typeOfMap, json, supportedParameters); configData.forEach(fieldConfiguration -> { - final String field = fieldConfiguration.getField().equals("addressType") ? "addressTypeId" : fieldConfiguration.getField(); + final String field = fieldConfiguration.field().equals("addressType") ? "addressTypeId" : fieldConfiguration.field(); final String fieldValue = this.fromApiJsonHelper.extractStringNamed(field, element); - if (fieldConfiguration.getField().equals("addressType") && fromNewClient) { + if (fieldConfiguration.field().equals("addressType") && fromNewClient) { baseDataValidator.reset().parameter(field).value(fieldValue).notBlank(); } else { - if (fieldConfiguration.isIs_mandatory() && fromNewClient) { + if (fieldConfiguration.isMandatory() && fromNewClient) { baseDataValidator.reset().parameter(field).value(fieldValue).notBlank(); } } - if (!fieldConfiguration.getValidation_regex().isEmpty()) { - baseDataValidator.reset().parameter(field).value(fieldValue) - .matchesRegularExpression(fieldConfiguration.getValidation_regex()); + if (!fieldConfiguration.validationRegex().isEmpty()) { + baseDataValidator.reset().parameter(field).value(fieldValue).matchesRegularExpression(fieldConfiguration.validationRegex()); } }); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/service/FieldConfigurationReadPlatformService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/service/FieldConfigurationReadPlatformService.java index 89823386f..33b96e7bb 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/service/FieldConfigurationReadPlatformService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/service/FieldConfigurationReadPlatformService.java @@ -18,13 +18,12 @@ */ package org.apache.fineract.portfolio.address.service; -import java.util.Collection; import java.util.List; import org.apache.fineract.portfolio.address.data.FieldConfigurationData; public interface FieldConfigurationReadPlatformService { - Collection retrieveFieldConfiguration(String entity); + List retrieveFieldConfiguration(String entity); List retrieveFieldConfigurationList(String entity); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/service/FieldConfigurationReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/service/FieldConfigurationReadPlatformServiceImpl.java index b2c2b9da1..521f647da 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/service/FieldConfigurationReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/service/FieldConfigurationReadPlatformServiceImpl.java @@ -20,7 +20,6 @@ package org.apache.fineract.portfolio.address.service; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.Collection; import java.util.List; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.portfolio.address.data.FieldConfigurationData; @@ -58,14 +57,13 @@ public class FieldConfigurationReadPlatformServiceImpl implements FieldConfigura final boolean is_mandatory = rs.getBoolean("is_mandatory"); final String validation_regex = rs.getString("validation_regex"); - return FieldConfigurationData.instance(fieldConfigurationId, entity, subentity, field, is_enabled, is_mandatory, - validation_regex); + return new FieldConfigurationData(fieldConfigurationId, entity, subentity, field, is_enabled, is_mandatory, validation_regex); } } @Override - public Collection retrieveFieldConfiguration(final String entity) { + public List retrieveFieldConfiguration(final String entity) { this.context.authenticatedUser(); final FieldMapper rm = new FieldMapper();