FINERACT-2169: Refactor client family member api;

This commit is contained in:
viktorpavlenko
2025-04-23 10:57:50 +02:00
committed by Adam Saghy
parent c0c7b45700
commit 241906e042
5 changed files with 83 additions and 72 deletions
@@ -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;
}
@@ -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<String> 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<ClientFamilyMembersData> 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<ClientFamilyMembersData> getFamilyMembers(@PathParam("clientId") final long clientId) {
this.context.authenticatedUser().validateHasReadPermission(RESOURCE_NAME_FOR_PERMISSIONS);
final Collection<ClientFamilyMembersData> 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);
}
}
@@ -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<ClientFamilyMembersData> getClientFamilyMembers(long clientId);
List<ClientFamilyMembersData> getClientFamilyMembers(long clientId);
ClientFamilyMembersData getClientFamilyMember(long id);
@@ -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<ClientFamilyMembersData> getClientFamilyMembers(long clientId) {
public List<ClientFamilyMembersData> getClientFamilyMembers(long clientId) {
this.context.authenticatedUser();
@@ -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();
}