From 241906e042d4e1d66af2ce1ca0840d4850c99e61 Mon Sep 17 00:00:00 2001 From: viktorpavlenko Date: Mon, 14 Apr 2025 17:34:35 +0300 Subject: [PATCH] FINERACT-2169: Refactor client family member api; --- .../data/ClientFamilyMemberRequest.java | 56 ++++++++++++++ .../api/ClientFamilyMembersApiResource.java | 74 ++++++------------- ...lientFamilyMembersReadPlatformService.java | 4 +- ...tFamilyMembersReadPlatformServiceImpl.java | 3 +- ...FamilyMembersWritePlatformServiceImpl.java | 18 +---- 5 files changed, 83 insertions(+), 72 deletions(-) create mode 100644 fineract-core/src/main/java/org/apache/fineract/portfolio/client/data/ClientFamilyMemberRequest.java diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/client/data/ClientFamilyMemberRequest.java b/fineract-core/src/main/java/org/apache/fineract/portfolio/client/data/ClientFamilyMemberRequest.java new file mode 100644 index 000000000..a7b41d6c2 --- /dev/null +++ b/fineract-core/src/main/java/org/apache/fineract/portfolio/client/data/ClientFamilyMemberRequest.java @@ -0,0 +1,56 @@ +/** + * 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.client.data; + +import java.io.Serial; +import java.io.Serializable; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldNameConstants; + +@Data +@Builder +@FieldNameConstants +@AllArgsConstructor +@NoArgsConstructor +public class ClientFamilyMemberRequest implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private String lastName; + private String firstName; + private String middleName; + private Long clientId; + private String dateFormat; + private String mobileNumber; + private Long genderId; + private Boolean isDependent; + private String dateOfBirth; + private Long relationshipId; + private String locale; + private String familyMembers; + private String qualification; + private Long maritalStatusId; + private Long id; + private Long age; + private Long professionId; +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientFamilyMembersApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientFamilyMembersApiResource.java index 651952f59..11dcf45d0 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientFamilyMembersApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientFamilyMembersApiResource.java @@ -29,22 +29,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.Set; +import java.util.List; 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.ToApiJsonSerializer; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; +import org.apache.fineract.portfolio.client.data.ClientFamilyMemberRequest; import org.apache.fineract.portfolio.client.data.ClientFamilyMembersData; import org.apache.fineract.portfolio.client.service.ClientFamilyMembersReadPlatformService; import org.springframework.stereotype.Component; @@ -55,100 +49,74 @@ import org.springframework.stereotype.Component; @RequiredArgsConstructor public class ClientFamilyMembersApiResource { - private static final Set RESPONSE_DATA_PARAMETERS = new HashSet<>(Arrays.asList("id", "clientId", "firstName", "middleName", - "lastName", "qualification", "relationship", "maritalStatus", "gender", "dateOfBirth", "profession", "clientFamilyMemberId")); private static final String RESOURCE_NAME_FOR_PERMISSIONS = "FamilyMembers"; private final PlatformSecurityContext context; private final ClientFamilyMembersReadPlatformService readPlatformService; private final ToApiJsonSerializer toApiJsonSerializer; - private final ApiRequestParameterHelper apiRequestParameterHelper; private final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService; @GET @Path("/{familyMemberId}") @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) - public String getFamilyMember(@Context final UriInfo uriInfo, @PathParam("familyMemberId") final Long familyMemberId, + public ClientFamilyMembersData getFamilyMember(@PathParam("familyMemberId") final Long familyMemberId, @PathParam("clientId") @Parameter(description = "clientId") final Long clientId) { this.context.authenticatedUser().validateHasReadPermission(RESOURCE_NAME_FOR_PERMISSIONS); - final ClientFamilyMembersData familyMembers = this.readPlatformService.getClientFamilyMember(familyMemberId); - - final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); - return this.toApiJsonSerializer.serialize(settings, familyMembers, RESPONSE_DATA_PARAMETERS); - + return this.readPlatformService.getClientFamilyMember(familyMemberId); } @GET @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) - public String getFamilyMembers(@Context final UriInfo uriInfo, @PathParam("clientId") final long clientId) { - + public List getFamilyMembers(@PathParam("clientId") final long clientId) { this.context.authenticatedUser().validateHasReadPermission(RESOURCE_NAME_FOR_PERMISSIONS); - - final Collection familyMembers = this.readPlatformService.getClientFamilyMembers(clientId); - - final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); - return this.toApiJsonSerializer.serialize(settings, familyMembers, RESPONSE_DATA_PARAMETERS); - + return this.readPlatformService.getClientFamilyMembers(clientId); } @GET @Path("/template") @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) - public String getTemplate(@Context final UriInfo uriInfo, @PathParam("clientId") final long clientId) { - + public ClientFamilyMembersData getTemplate(@PathParam("clientId") final long clientId) { this.context.authenticatedUser().validateHasReadPermission(RESOURCE_NAME_FOR_PERMISSIONS); - - final ClientFamilyMembersData options = this.readPlatformService.retrieveTemplate(); - - final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); - return this.toApiJsonSerializer.serialize(settings, options, RESPONSE_DATA_PARAMETERS); - + return this.readPlatformService.retrieveTemplate(); } @PUT @Path("/{familyMemberId}") @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) - public String updateClientFamilyMembers(@PathParam("familyMemberId") final long familyMemberId, final String apiRequestBodyAsJson, + public CommandProcessingResult updateClientFamilyMembers(@PathParam("familyMemberId") final long familyMemberId, + ClientFamilyMemberRequest clientFamilyMemberRequest, @PathParam("clientId") @Parameter(description = "clientId") final Long clientId) { + final CommandWrapper commandRequest = new CommandWrapperBuilder().updateFamilyMembers(familyMemberId) + .withJson(toApiJsonSerializer.serialize(clientFamilyMemberRequest)).build(); - final CommandWrapper commandRequest = new CommandWrapperBuilder().updateFamilyMembers(familyMemberId).withJson(apiRequestBodyAsJson) - .build(); - - final CommandProcessingResult result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest); - - return this.toApiJsonSerializer.serialize(result); + return this.commandsSourceWritePlatformService.logCommandSource(commandRequest); } @POST @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) - public String addClientFamilyMembers(@PathParam("clientId") final long clientid, final String apiRequestBodyAsJson) { + public CommandProcessingResult addClientFamilyMembers(@PathParam("clientId") final long clientid, + ClientFamilyMemberRequest clientFamilyMemberRequest) { + final CommandWrapper commandRequest = new CommandWrapperBuilder().addFamilyMembers(clientid) + .withJson(toApiJsonSerializer.serialize(clientFamilyMemberRequest)).build(); - final CommandWrapper commandRequest = new CommandWrapperBuilder().addFamilyMembers(clientid).withJson(apiRequestBodyAsJson).build(); - - final CommandProcessingResult result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest); - - return this.toApiJsonSerializer.serialize(result); + return this.commandsSourceWritePlatformService.logCommandSource(commandRequest); } @DELETE @Path("/{familyMemberId}") @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) - public String deleteClientFamilyMembers(@PathParam("familyMemberId") final long familyMemberId, final String apiRequestBodyAsJson, + public CommandProcessingResult deleteClientFamilyMembers(@PathParam("familyMemberId") final long familyMemberId, @PathParam("clientId") @Parameter(description = "clientId") final Long clientId) { + final CommandWrapper commandRequest = new CommandWrapperBuilder().deleteFamilyMembers(familyMemberId).build(); - final CommandWrapper commandRequest = new CommandWrapperBuilder().deleteFamilyMembers(familyMemberId).withJson(apiRequestBodyAsJson) - .build(); - - final CommandProcessingResult result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest); - - return this.toApiJsonSerializer.serialize(result); + return this.commandsSourceWritePlatformService.logCommandSource(commandRequest); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientFamilyMembersReadPlatformService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientFamilyMembersReadPlatformService.java index 7dfedcf07..deeebd63f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientFamilyMembersReadPlatformService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientFamilyMembersReadPlatformService.java @@ -19,12 +19,12 @@ package org.apache.fineract.portfolio.client.service; -import java.util.Collection; +import java.util.List; import org.apache.fineract.portfolio.client.data.ClientFamilyMembersData; public interface ClientFamilyMembersReadPlatformService { - Collection getClientFamilyMembers(long clientId); + List getClientFamilyMembers(long clientId); ClientFamilyMembersData getClientFamilyMember(long id); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientFamilyMembersReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientFamilyMembersReadPlatformServiceImpl.java index cd0d5ca3e..bc4eab39e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientFamilyMembersReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientFamilyMembersReadPlatformServiceImpl.java @@ -22,7 +22,6 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.time.LocalDate; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import org.apache.fineract.infrastructure.codes.data.CodeValueData; import org.apache.fineract.infrastructure.codes.service.CodeValueReadPlatformService; @@ -91,7 +90,7 @@ public class ClientFamilyMembersReadPlatformServiceImpl implements ClientFamilyM } @Override - public Collection getClientFamilyMembers(long clientId) { + public List getClientFamilyMembers(long clientId) { this.context.authenticatedUser(); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientFamilyMembersWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientFamilyMembersWritePlatformServiceImpl.java index e58fa70c4..78d44c703 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientFamilyMembersWritePlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientFamilyMembersWritePlatformServiceImpl.java @@ -354,26 +354,14 @@ public class ClientFamilyMembersWritePlatformServiceImpl implements ClientFamily @Override public CommandProcessingResult deleteFamilyMember(Long clientFamilyMemberId, JsonCommand command) { - // TODO Auto-generated method stub - this.context.authenticatedUser(); apiJsonDeserializer.validateForDelete(clientFamilyMemberId); - ClientFamilyMembers clientFamilyMember = null; + ClientFamilyMembers clientFamilyMember = clientFamilyRepository.getReferenceById(clientFamilyMemberId); + clientFamilyRepository.delete(clientFamilyMember); - if (clientFamilyMemberId != null) { - clientFamilyMember = clientFamilyRepository.getReferenceById(clientFamilyMemberId); - clientFamilyRepository.delete(clientFamilyMember); - - } - - if (clientFamilyMember != null) { - return new CommandProcessingResultBuilder().withCommandId(command.commandId()).withEntityId(clientFamilyMember.getId()).build(); - } else { - return new CommandProcessingResultBuilder().withCommandId(command.commandId()).withEntityId(Long.valueOf(clientFamilyMemberId)) - .build(); - } + return new CommandProcessingResultBuilder().withCommandId(command.commandId()).withEntityId(clientFamilyMember.getId()).build(); }