From 8462c67f3c4ea3073eea12bb0a893dc08210f7cc Mon Sep 17 00:00:00 2001 From: viktorpavlenko Date: Wed, 19 Mar 2025 11:59:53 +0200 Subject: [PATCH] FINERACT-2169: Refactor job api controller; --- .../test/helper/WorkFlowJobHelper.java | 8 +-- .../api/ConfigureBusinessStepApiResource.java | 58 ++++----------- .../ConfigureBusinessStepResourceSwagger.java | 70 ------------------- .../cob/data/request/BusinessStepRequest.java | 30 ++++++++ .../common/BusinessStepHelper.java | 4 +- 5 files changed, 49 insertions(+), 121 deletions(-) delete mode 100644 fineract-provider/src/main/java/org/apache/fineract/cob/api/ConfigureBusinessStepResourceSwagger.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/cob/data/request/BusinessStepRequest.java diff --git a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/helper/WorkFlowJobHelper.java b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/helper/WorkFlowJobHelper.java index 431e67b8d..0cc8d211f 100644 --- a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/helper/WorkFlowJobHelper.java +++ b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/helper/WorkFlowJobHelper.java @@ -25,8 +25,8 @@ import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.fineract.client.models.BusinessStep; -import org.apache.fineract.client.models.GetBusinessStepConfigResponse; -import org.apache.fineract.client.models.UpdateBusinessStepConfigRequest; +import org.apache.fineract.client.models.BusinessStepRequest; +import org.apache.fineract.client.models.JobBusinessStepConfigData; import org.apache.fineract.client.services.BusinessStepConfigurationApi; import org.springframework.stereotype.Component; import retrofit2.Response; @@ -52,7 +52,7 @@ public class WorkFlowJobHelper { new BusinessStep().stepName("LOAN_INTEREST_RECALCULATION").order(9L), // new BusinessStep().stepName("EXTERNAL_ASSET_OWNER_TRANSFER").order(10L)// ); - UpdateBusinessStepConfigRequest request = new UpdateBusinessStepConfigRequest().businessSteps(businessSteps); + BusinessStepRequest request = new BusinessStepRequest().businessSteps(businessSteps); Response response = businessStepConfigurationApi.updateJobBusinessStepConfig(WORKFLOW_NAME_LOAN_CLOSE_OF_BUSINESS, request) .execute(); ErrorHelper.checkSuccessfulApiCall(response); @@ -62,7 +62,7 @@ public class WorkFlowJobHelper { private void logChanges() throws IOException { // --- log changes --- - Response changesResponse = businessStepConfigurationApi + Response changesResponse = businessStepConfigurationApi .retrieveAllConfiguredBusinessStep(WORKFLOW_NAME_LOAN_CLOSE_OF_BUSINESS).execute(); List businessStepsChanged = changesResponse.body().getBusinessSteps(); List changes = businessStepsChanged// diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/api/ConfigureBusinessStepApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/cob/api/ConfigureBusinessStepApiResource.java index 05e389d99..e76924253 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/cob/api/ConfigureBusinessStepApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/cob/api/ConfigureBusinessStepApiResource.java @@ -32,24 +32,18 @@ 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.Response; -import jakarta.ws.rs.core.UriInfo; -import java.util.Arrays; -import java.util.HashSet; import java.util.List; -import java.util.Set; import lombok.RequiredArgsConstructor; import org.apache.fineract.cob.data.ConfiguredJobNamesDTO; import org.apache.fineract.cob.data.JobBusinessStepConfigData; import org.apache.fineract.cob.data.JobBusinessStepDetail; +import org.apache.fineract.cob.data.request.BusinessStepRequest; import org.apache.fineract.cob.service.ConfigJobParameterService; 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.serialization.ApiRequestJsonSerializationSettings; import org.apache.fineract.infrastructure.core.serialization.DefaultToApiJsonSerializer; import org.springframework.stereotype.Component; @@ -59,15 +53,7 @@ import org.springframework.stereotype.Component; @RequiredArgsConstructor public class ConfigureBusinessStepApiResource { - private static final Set BUSINESS_STEP_CONFIG_RESPONSE_DATA_PARAMETERS = new HashSet<>( - Arrays.asList("jobName", "businessSteps")); - private static final Set BUSINESS_STEP_DETAIL_RESPONSE_DATA_PARAMETERS = new HashSet<>( - Arrays.asList("jobName", "availableBusinessSteps")); - - private final DefaultToApiJsonSerializer businessStepConfigSerializeService; - private final DefaultToApiJsonSerializer businessStepDetailSerializeService; - private final DefaultToApiJsonSerializer configuredJobNamesSerializer; - private final ApiRequestParameterHelper apiRequestParameterHelper; + private final DefaultToApiJsonSerializer toApiJsonSerializer; private final ConfigJobParameterService configJobParameterService; private final PortfolioCommandSourceWritePlatformService commandWritePlatformService; @@ -75,14 +61,9 @@ public class ConfigureBusinessStepApiResource { @Path("/names") @Produces({ MediaType.APPLICATION_JSON }) @Operation(summary = "List Business Jobs", description = "Returns the configured Business Jobs") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = ConfigureBusinessStepResourceSwagger.GetBusinessJobConfigResponse.class))) }) - public String retrieveAllConfiguredBusinessJobs(@Context final UriInfo uriInfo) { - + public ConfiguredJobNamesDTO retrieveAllConfiguredBusinessJobs() { List businessJobNames = configJobParameterService.getAllConfiguredJobNames(); - ConfiguredJobNamesDTO result = new ConfiguredJobNamesDTO(businessJobNames); - - return configuredJobNamesSerializer.serialize(result); + return new ConfiguredJobNamesDTO(businessJobNames); } @GET @@ -90,16 +71,9 @@ public class ConfigureBusinessStepApiResource { @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) @Operation(summary = "List Business Step Configurations for a Job", description = "Returns the configured Business Steps for a job") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = ConfigureBusinessStepResourceSwagger.GetBusinessStepConfigResponse.class))) }) - public String retrieveAllConfiguredBusinessStep(@Context final UriInfo uriInfo, + public JobBusinessStepConfigData retrieveAllConfiguredBusinessStep( @PathParam("jobName") @Parameter(description = "jobName") final String jobName) { - - JobBusinessStepConfigData jobBusinessStepConfigData = configJobParameterService.getBusinessStepConfigByJobName(jobName); - - final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper.process(uriInfo.getQueryParameters()); - return businessStepConfigSerializeService.serialize(settings, jobBusinessStepConfigData, - BUSINESS_STEP_CONFIG_RESPONSE_DATA_PARAMETERS); + return configJobParameterService.getBusinessStepConfigByJobName(jobName); } @PUT @@ -107,13 +81,14 @@ public class ConfigureBusinessStepApiResource { @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) @Operation(summary = "List Business Step Configurations for a Job", description = "Updates the Business steps execution order for a job") - @RequestBody(content = @Content(schema = @Schema(implementation = ConfigureBusinessStepResourceSwagger.UpdateBusinessStepConfigRequest.class))) + @RequestBody(content = @Content(schema = @Schema(implementation = BusinessStepRequest.class))) @ApiResponses({ @ApiResponse(responseCode = "204", description = "NO_CONTENT") }) public Response updateJobBusinessStepConfig(@PathParam("jobName") @Parameter(description = "jobName") final String jobName, - @Parameter(hidden = true) final String jsonRequestBody) { + @Parameter(hidden = true) BusinessStepRequest businessStepRequest) { + + final CommandWrapper commandRequest = new CommandWrapperBuilder().updateBusinessStepConfig(jobName) + .withJson(toApiJsonSerializer.serialize(businessStepRequest)).build(); - final CommandWrapper commandRequest = new CommandWrapperBuilder().updateBusinessStepConfig(jobName).withJson(jsonRequestBody) - .build(); commandWritePlatformService.logCommandSource(commandRequest); return Response.status(Response.Status.NO_CONTENT).build(); } @@ -123,15 +98,8 @@ public class ConfigureBusinessStepApiResource { @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) @Operation(summary = "List Business Step Configurations for a Job", description = "Returns the available Business Steps for a job") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = ConfigureBusinessStepResourceSwagger.GetBusinessStepConfigResponse.class))) }) - public String retrieveAllAvailableBusinessStep(@Context final UriInfo uriInfo, + public JobBusinessStepDetail retrieveAllAvailableBusinessStep( @PathParam("jobName") @Parameter(description = "jobName") final String jobName) { - - JobBusinessStepDetail availableBusinessStepsByJobName = configJobParameterService.getAvailableBusinessStepsByJobName(jobName); - - final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper.process(uriInfo.getQueryParameters()); - return businessStepDetailSerializeService.serialize(settings, availableBusinessStepsByJobName, - BUSINESS_STEP_DETAIL_RESPONSE_DATA_PARAMETERS); + return configJobParameterService.getAvailableBusinessStepsByJobName(jobName); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/api/ConfigureBusinessStepResourceSwagger.java b/fineract-provider/src/main/java/org/apache/fineract/cob/api/ConfigureBusinessStepResourceSwagger.java deleted file mode 100644 index a8eaa97a6..000000000 --- a/fineract-provider/src/main/java/org/apache/fineract/cob/api/ConfigureBusinessStepResourceSwagger.java +++ /dev/null @@ -1,70 +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.cob.api; - -import io.swagger.v3.oas.annotations.media.Schema; -import java.util.List; - -final class ConfigureBusinessStepResourceSwagger { - - private ConfigureBusinessStepResourceSwagger() { - - } - - @Schema(description = "GetBusinessJobConfigResponse") - public static final class GetBusinessJobConfigResponse { - - private GetBusinessJobConfigResponse() {} - - public List businessJobs; - - } - - @Schema(description = "GetBusinessStepConfigResponse") - public static final class GetBusinessStepConfigResponse { - - private GetBusinessStepConfigResponse() {} - - @Schema(example = "CLOSE_OF_BUSINESS") - public String jobName; - public List businessSteps; - - } - - @Schema(description = "BusinessStep") - public static final class BusinessStep { - - private BusinessStep() {} - - @Schema(example = "APPLY_PENALTY_FOR_OVERDUE_LOANS") - public String stepName; - @Schema(example = "1") - public Long order; - - } - - @Schema(description = "UpdateBusinessStepConfigRequest") - public static final class UpdateBusinessStepConfigRequest { - - private UpdateBusinessStepConfigRequest() {} - - public List businessSteps; - - } -} diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/data/request/BusinessStepRequest.java b/fineract-provider/src/main/java/org/apache/fineract/cob/data/request/BusinessStepRequest.java new file mode 100644 index 000000000..a145028c5 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/cob/data/request/BusinessStepRequest.java @@ -0,0 +1,30 @@ +/** + * 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.cob.data.request; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; +import org.apache.fineract.cob.data.BusinessStep; + +public record BusinessStepRequest(List businessSteps) implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; +} diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/BusinessStepHelper.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/BusinessStepHelper.java index 39ce6e640..0be73f0df 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/BusinessStepHelper.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/BusinessStepHelper.java @@ -21,7 +21,7 @@ package org.apache.fineract.integrationtests.common; import java.util.ArrayList; import java.util.List; import org.apache.fineract.client.models.BusinessStep; -import org.apache.fineract.client.models.UpdateBusinessStepConfigRequest; +import org.apache.fineract.client.models.BusinessStepRequest; import org.apache.fineract.client.util.Calls; public class BusinessStepHelper { @@ -39,6 +39,6 @@ public class BusinessStepHelper { stepList.add(businessStep); } Calls.ok(FineractClientHelper.getFineractClient().businessStepConfiguration.updateJobBusinessStepConfig(jobName, - new UpdateBusinessStepConfigRequest().businessSteps(stepList))); + new BusinessStepRequest().businessSteps(stepList))); } }