From c0c7b457009f37b9a03e91717273e3f9e590a4ad Mon Sep 17 00:00:00 2001 From: "oleksandr.masliuk" Date: Fri, 11 Apr 2025 14:17:52 +0300 Subject: [PATCH] FINERACT-2169: Apply dto in ClientIdentifiersApiResource --- .../api/ClientIdentifiersApiResource.java | 50 +++++++------------ .../ClientIdentifiersApiResourceSwagger.java | 39 +-------------- .../client/data/ClientIdentifierData.java | 23 ++++----- .../client/data/ClientIdentifierRequest.java | 47 +++++++++++++++++ .../ClientIdentifierReadPlatformService.java | 4 +- ...ientIdentifierReadPlatformServiceImpl.java | 4 +- 6 files changed, 81 insertions(+), 86 deletions(-) create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientIdentifierRequest.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientIdentifiersApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientIdentifiersApiResource.java index 323a9b465..c756cdd33 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientIdentifiersApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientIdentifiersApiResource.java @@ -20,7 +20,6 @@ package org.apache.fineract.portfolio.client.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.parameters.RequestBody; @@ -41,6 +40,7 @@ import jakarta.ws.rs.core.UriInfo; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; +import java.util.List; import java.util.Set; import lombok.RequiredArgsConstructor; import org.apache.fineract.commands.domain.CommandWrapper; @@ -55,6 +55,7 @@ import org.apache.fineract.infrastructure.core.serialization.DefaultToApiJsonSer import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.portfolio.client.data.ClientData; import org.apache.fineract.portfolio.client.data.ClientIdentifierData; +import org.apache.fineract.portfolio.client.data.ClientIdentifierRequest; import org.apache.fineract.portfolio.client.exception.DuplicateClientIdentifierException; import org.apache.fineract.portfolio.client.service.ClientIdentifierReadPlatformService; import org.apache.fineract.portfolio.client.service.ClientReadPlatformService; @@ -85,18 +86,12 @@ public class ClientIdentifiersApiResource { @Produces({ MediaType.APPLICATION_JSON }) @Operation(summary = "List all Identifiers for a Client", description = "Example Requests:\n" + "clients/1/identifiers\n" + "\n" + "\n" + "clients/1/identifiers?fields=documentKey,documentType,description") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(array = @ArraySchema(schema = @Schema(implementation = ClientIdentifiersApiResourceSwagger.GetClientsClientIdIdentifiersResponse.class)))) }) - public String retrieveAllClientIdentifiers(@Context final UriInfo uriInfo, + public List retrieveAllClientIdentifiers( @PathParam("clientId") @Parameter(description = "clientId") final Long clientId) { this.context.authenticatedUser().validateHasReadPermission(RESOURCE_NAME_FOR_PERMISSIONS); - final Collection clientIdentifiers = this.clientIdentifierReadPlatformService - .retrieveClientIdentifiers(clientId); - - final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); - return this.toApiJsonSerializer.serialize(settings, clientIdentifiers, CLIENT_IDENTIFIER_DATA_PARAMETERS); + return this.clientIdentifierReadPlatformService.retrieveClientIdentifiers(clientId); } @GET @@ -105,18 +100,14 @@ public class ClientIdentifiersApiResource { @Produces({ MediaType.APPLICATION_JSON }) @Operation(summary = "Retrieve Client Identifier Details Template", description = "This is a convenience resource useful for building maintenance user interface screens for client applications. The template data returned consists of any or all of:\n" + "\n" + " Field Defaults\n" + " Allowed description Lists\n" + "\n\nExample Request:\n" + "clients/1/identifiers/template") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = ClientIdentifiersApiResourceSwagger.GetClientsClientIdIdentifiersTemplateResponse.class))) }) - public String newClientIdentifierDetails(@Context final UriInfo uriInfo, + public ClientIdentifierData newClientIdentifierDetails( @PathParam("clientId") @Parameter(description = "clientId") final Long clientId) { this.context.authenticatedUser().validateHasReadPermission(RESOURCE_NAME_FOR_PERMISSIONS); - final Collection codeValues = this.codeValueReadPlatformService.retrieveCodeValuesByCode("Customer Identifier"); - final ClientIdentifierData clientIdentifierData = ClientIdentifierData.template(codeValues); + final List codeValues = this.codeValueReadPlatformService.retrieveCodeValuesByCode("Customer Identifier"); - final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); - return this.toApiJsonSerializer.serialize(settings, clientIdentifierData, CLIENT_IDENTIFIER_DATA_PARAMETERS); + return ClientIdentifierData.template(codeValues); } @POST @@ -126,16 +117,14 @@ public class ClientIdentifiersApiResource { @RequestBody(required = true, content = @Content(schema = @Schema(implementation = ClientIdentifiersApiResourceSwagger.PostClientsClientIdIdentifiersRequest.class))) @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = ClientIdentifiersApiResourceSwagger.PostClientsClientIdIdentifiersResponse.class))) }) - public String createClientIdentifier(@PathParam("clientId") @Parameter(description = "clientId") final Long clientId, - @Parameter(hidden = true) final String apiRequestBodyAsJson) { + public CommandProcessingResult createClientIdentifier(@PathParam("clientId") @Parameter(description = "clientId") final Long clientId, + @Parameter(hidden = true) final ClientIdentifierRequest clientIdentifierRequest) { try { final CommandWrapper commandRequest = new CommandWrapperBuilder().createClientIdentifier(clientId) - .withJson(apiRequestBodyAsJson).build(); + .withJson(toApiJsonSerializer.serialize(clientIdentifierRequest)).build(); - final CommandProcessingResult result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest); - - return this.toApiJsonSerializer.serialize(result); + return this.commandsSourceWritePlatformService.logCommandSource(commandRequest); } catch (final DuplicateClientIdentifierException e) { DuplicateClientIdentifierException rethrowas = e; if (e.getDocumentTypeId() != null) { @@ -180,20 +169,19 @@ public class ClientIdentifiersApiResource { @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) @Operation(summary = "Update a Client Identifier", description = "Updates a Client Identifier") - @RequestBody(required = true, content = @Content(schema = @Schema(implementation = ClientIdentifiersApiResourceSwagger.PutClientsClientIdIdentifiersIdentifierIdRequest.class))) + @RequestBody(required = true, content = @Content(schema = @Schema(implementation = ClientIdentifierRequest.class))) @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = ClientIdentifiersApiResourceSwagger.PutClientsClientIdIdentifiersIdentifierIdResponse.class))) }) - public String updateClientIdentifer(@PathParam("clientId") @Parameter(description = "clientId") final Long clientId, + public CommandProcessingResult updateClientIdentifer(@PathParam("clientId") @Parameter(description = "clientId") final Long clientId, @PathParam("identifierId") @Parameter(description = "identifierId") final Long clientIdentifierId, - @Parameter(hidden = true) final String apiRequestBodyAsJson) { + @Parameter(hidden = true) final ClientIdentifierRequest clientIdentifierRequest) { try { final CommandWrapper commandRequest = new CommandWrapperBuilder().updateClientIdentifier(clientId, clientIdentifierId) - .withJson(apiRequestBodyAsJson).build(); + .withJson(toApiJsonSerializer.serialize(clientIdentifierRequest)).build(); - final CommandProcessingResult result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest); + return this.commandsSourceWritePlatformService.logCommandSource(commandRequest); - return this.toApiJsonSerializer.serialize(result); } catch (final DuplicateClientIdentifierException e) { DuplicateClientIdentifierException reThrowAs = e; if (e.getDocumentTypeId() != null) { @@ -213,13 +201,11 @@ public class ClientIdentifiersApiResource { @Operation(summary = "Delete a Client Identifier", description = "Deletes a Client Identifier") @ApiResponses({ @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = ClientIdentifiersApiResourceSwagger.DeleteClientsClientIdIdentifiersIdentifierIdResponse.class))) }) - public String deleteClientIdentifier(@PathParam("clientId") @Parameter(description = "clientId") final Long clientId, + public CommandProcessingResult deleteClientIdentifier(@PathParam("clientId") @Parameter(description = "clientId") final Long clientId, @PathParam("identifierId") @Parameter(description = "identifierId") final Long clientIdentifierId) { final CommandWrapper commandRequest = new CommandWrapperBuilder().deleteClientIdentifier(clientId, clientIdentifierId).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/api/ClientIdentifiersApiResourceSwagger.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientIdentifiersApiResourceSwagger.java index 0f380a0b4..eab09490e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientIdentifiersApiResourceSwagger.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientIdentifiersApiResourceSwagger.java @@ -19,7 +19,7 @@ package org.apache.fineract.portfolio.client.api; import io.swagger.v3.oas.annotations.media.Schema; -import java.util.Set; +import org.apache.fineract.portfolio.client.data.ClientIdentifierRequest; /** * Created by Chirag Gupta on 01/13/18. @@ -54,26 +54,6 @@ final class ClientIdentifiersApiResourceSwagger { public String description; } - @Schema(description = "GetClientsClientIdIdentifiersTemplateResponse") - public static final class GetClientsClientIdIdentifiersTemplateResponse { - - private GetClientsClientIdIdentifiersTemplateResponse() {} - - static final class GetClientsAllowedDocumentTypes { - - private GetClientsAllowedDocumentTypes() {} - - @Schema(example = "1") - public Long id; - @Schema(example = "Passport") - public String name; - @Schema(example = "0") - public Integer position; - } - - public Set allowedDocumentTypes; - } - @Schema(description = "PostClientsClientIdIdentifiersRequest") public static final class PostClientsClientIdIdentifiersRequest { @@ -89,21 +69,6 @@ final class ClientIdentifiersApiResourceSwagger { public String status; } - @Schema(description = "PutClientsClientIdIdentifiersIdentifierIdRequest") - public static final class PutClientsClientIdIdentifiersIdentifierIdRequest { - - private PutClientsClientIdIdentifiersIdentifierIdRequest() {} - - @Schema(example = "4") - public Long documentTypeId; - @Schema(example = "KA-94667") - public String documentKey; - @Schema(example = "Document has been updated") - public String description; - @Schema(example = "Active") - public String status; - } - @Schema(description = "PutClientsClientIdIdentifiersIdentifierIdResponse") public static final class PutClientsClientIdIdentifiersIdentifierIdResponse { @@ -115,7 +80,7 @@ final class ClientIdentifiersApiResourceSwagger { public Long clientId; @Schema(example = "3") public Long resourceId; - public PutClientsClientIdIdentifiersIdentifierIdRequest changes; + public ClientIdentifierRequest changes; } @Schema(description = "PostClientsClientIdIdentifiersResponse") diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientIdentifierData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientIdentifierData.java index 7d8ad2fe6..ece9bd2fd 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientIdentifierData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientIdentifierData.java @@ -18,13 +18,22 @@ */ package org.apache.fineract.portfolio.client.data; +import java.io.Serial; +import java.io.Serializable; import java.util.Collection; +import lombok.AllArgsConstructor; +import lombok.Data; import org.apache.fineract.infrastructure.codes.data.CodeValueData; /** * Immutable data object represent client identity data. */ -public class ClientIdentifierData { +@Data +@AllArgsConstructor +public class ClientIdentifierData implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; private final Long id; private final Long clientId; @@ -48,16 +57,4 @@ public class ClientIdentifierData { return new ClientIdentifierData(data.id, data.clientId, data.documentType, data.documentKey, data.description, data.status, codeValues); } - - public ClientIdentifierData(final Long id, final Long clientId, final CodeValueData documentType, final String documentKey, - final String description, final String status, final Collection allowedDocumentTypes) { - this.id = id; - - this.clientId = clientId; - this.documentType = documentType; - this.documentKey = documentKey; - this.description = description; - this.allowedDocumentTypes = allowedDocumentTypes; - this.status = status; - } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientIdentifierRequest.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientIdentifierRequest.java new file mode 100644 index 000000000..c077c866f --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientIdentifierRequest.java @@ -0,0 +1,47 @@ +/** + * 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 io.swagger.v3.oas.annotations.media.Schema; +import java.io.Serial; +import java.io.Serializable; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class ClientIdentifierRequest implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Schema(example = "1") + public Long documentTypeId; + @Schema(example = "KA-54677") + public String documentKey; + @Schema(example = "Document has been verified") + public String description; + @Schema(example = "Active") + public String status; + +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientIdentifierReadPlatformService.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientIdentifierReadPlatformService.java index 643100a0f..b68acf31f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientIdentifierReadPlatformService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientIdentifierReadPlatformService.java @@ -18,12 +18,12 @@ */ package org.apache.fineract.portfolio.client.service; -import java.util.Collection; +import java.util.List; import org.apache.fineract.portfolio.client.data.ClientIdentifierData; public interface ClientIdentifierReadPlatformService { - Collection retrieveClientIdentifiers(Long clientId); + List retrieveClientIdentifiers(Long clientId); ClientIdentifierData retrieveClientIdentifier(Long clientId, Long clientIdentifierId); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientIdentifierReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientIdentifierReadPlatformServiceImpl.java index 88dace77f..4a608573a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientIdentifierReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientIdentifierReadPlatformServiceImpl.java @@ -20,7 +20,7 @@ package org.apache.fineract.portfolio.client.service; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.Collection; +import java.util.List; import lombok.RequiredArgsConstructor; import org.apache.fineract.infrastructure.codes.data.CodeValueData; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; @@ -42,7 +42,7 @@ public class ClientIdentifierReadPlatformServiceImpl implements ClientIdentifier private final PlatformSecurityContext context; @Override - public Collection retrieveClientIdentifiers(final Long clientId) { + public List retrieveClientIdentifiers(final Long clientId) { final AppUser currentUser = this.context.authenticatedUser(); final String hierarchy = currentUser.getOffice().getHierarchy();