FINERACT-2169: Refactor field configuration api controller;

This commit is contained in:
viktorpavlenko
2025-03-27 15:08:37 +01:00
committed by Adam Saghy
parent 65b74ee87b
commit 1b9459b7b4
6 changed files with 19 additions and 152 deletions
@@ -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<String> 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<FieldConfigurationData> 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<FieldConfigurationData> getAddresses(@PathParam("entity") @Parameter(description = "entity") final String entityname) {
this.context.authenticatedUser().validateHasReadPermission(RESOURCE_NAME_FOR_PERMISSIONS);
final Collection<FieldConfigurationData> 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);
}
}
@@ -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;
}
}
@@ -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;
}
@@ -65,10 +65,9 @@ public class AddressCommandFromApiJsonDeserializer {
final JsonElement element = this.fromApiJsonHelper.parse(json);
final List<FieldConfigurationData> configurationData = new ArrayList<>(this.readservice.retrieveFieldConfigurationList("ADDRESS"));
// validate the json fields from the configuration data fields
final List<FieldConfigurationData> configData = configurationData.stream().filter(FieldConfigurationData::isEnabled)
.collect(Collectors.toList());
final List<FieldConfigurationData> configData = configurationData.stream().filter(FieldConfigurationData::isEnabled).toList();
final Set<String> supportedParameters = configData.stream().map(FieldConfigurationData::getField).collect(Collectors.toSet());
final Set<String> 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());
}
});
@@ -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<FieldConfigurationData> retrieveFieldConfiguration(String entity);
List<FieldConfigurationData> retrieveFieldConfiguration(String entity);
List<FieldConfigurationData> retrieveFieldConfigurationList(String entity);
}
@@ -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<FieldConfigurationData> retrieveFieldConfiguration(final String entity) {
public List<FieldConfigurationData> retrieveFieldConfiguration(final String entity) {
this.context.authenticatedUser();
final FieldMapper rm = new FieldMapper();