From 84c101ab142c5c6aeb6a37f2c4933cd9668ae916 Mon Sep 17 00:00:00 2001 From: viktorpavlenko Date: Mon, 17 Mar 2025 17:32:39 +0200 Subject: [PATCH] FINERACT-2169: Apply dto for external event config api; --- ...ExternalEventConfigurationApiResource.java | 38 ++++----------- ...lEventConfigurationApiResourceSwagger.java | 48 ------------------- .../ExternalEventConfigurationCommand.java | 12 ++--- ...ConfigurationWritePlatformServiceImpl.java | 2 +- .../ExternalEventSuiteInitializerStep.java | 9 ++-- .../externalevents/ExternalEventHelper.java | 4 +- 6 files changed, 22 insertions(+), 91 deletions(-) delete mode 100644 fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/api/ExternalEventConfigurationApiResourceSwagger.java diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/api/ExternalEventConfigurationApiResource.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/api/ExternalEventConfigurationApiResource.java index f0df42d23..f61b3e461 100644 --- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/api/ExternalEventConfigurationApiResource.java +++ b/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/api/ExternalEventConfigurationApiResource.java @@ -23,28 +23,20 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; -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.PUT; import jakarta.ws.rs.Path; 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.HashSet; -import java.util.Set; 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.DefaultToApiJsonSerializer; +import org.apache.fineract.infrastructure.event.external.command.ExternalEventConfigurationCommand; import org.apache.fineract.infrastructure.event.external.data.ExternalEventConfigurationData; import org.apache.fineract.infrastructure.event.external.service.ExternalEventConfigurationReadPlatformService; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; @@ -56,12 +48,9 @@ import org.springframework.stereotype.Component; @Tag(name = "External event configuration", description = "External event configuration enables user to enable/disable event posting to downstream message channel") public class ExternalEventConfigurationApiResource { - private static final Set RESPONSE_DATA_PARAMETERS = new HashSet<>(Arrays.asList("type", "enabled")); - private static final String RESOURCE_NAME_FOR_PERMISSIONS = "EXTERNAL_EVENT_CONFIGURATION"; private final PlatformSecurityContext context; - private final ApiRequestParameterHelper apiRequestParameterHelper; private final PortfolioCommandSourceWritePlatformService commandWritePlatformService; private final DefaultToApiJsonSerializer jsonSerializer; private final ExternalEventConfigurationReadPlatformService readPlatformService; @@ -70,30 +59,21 @@ public class ExternalEventConfigurationApiResource { @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) @Operation(summary = "List all external event configurations", description = "") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "List of all external event configurations", content = @Content(schema = @Schema(implementation = ExternalEventConfigurationApiResourceSwagger.GetExternalEventConfigurationsResponse.class))) }) - public String retrieveExternalEventConfiguration(@Context final UriInfo uriInfo) { + public ExternalEventConfigurationData retrieveExternalEventConfiguration() { context.authenticatedUser().validateHasReadPermission(RESOURCE_NAME_FOR_PERMISSIONS); - final ExternalEventConfigurationData configurationData = readPlatformService.findAllExternalEventConfigurations(); - final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper.process(uriInfo.getQueryParameters()); - return jsonSerializer.serialize(settings, configurationData, RESPONSE_DATA_PARAMETERS); + return readPlatformService.findAllExternalEventConfigurations(); } @PUT @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) @Operation(summary = "Enable/Disable external events posting", description = "") - @RequestBody(required = true, content = @Content(schema = @Schema(implementation = ExternalEventConfigurationApiResourceSwagger.PutExternalEventConfigurationsRequest.class))) - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = CommandProcessingResult.class))) }) - public String updateExternalEventConfigurationsDetails(@Parameter(hidden = true) final String apiRequestBodyAsJson) { + @RequestBody(required = true, content = @Content(schema = @Schema(implementation = ExternalEventConfigurationCommand.class))) + public CommandProcessingResult updateExternalEventConfigurationsDetails( + @Parameter(hidden = true) ExternalEventConfigurationCommand command) { context.authenticatedUser().validateHasUpdatePermission(RESOURCE_NAME_FOR_PERMISSIONS); - final CommandWrapper commandRequest = new CommandWrapperBuilder() // - .updateExternalEventConfigurations() // - .withJson(apiRequestBodyAsJson) // - .build(); - final CommandProcessingResult result = this.commandWritePlatformService.logCommandSource(commandRequest); - return this.jsonSerializer.serialize(result); - + final CommandWrapper commandRequest = new CommandWrapperBuilder().updateExternalEventConfigurations() + .withJson(jsonSerializer.serialize(command)).build(); + return commandWritePlatformService.logCommandSource(commandRequest); } } diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/api/ExternalEventConfigurationApiResourceSwagger.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/api/ExternalEventConfigurationApiResourceSwagger.java deleted file mode 100644 index 91a7271ec..000000000 --- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/api/ExternalEventConfigurationApiResourceSwagger.java +++ /dev/null @@ -1,48 +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.infrastructure.event.external.api; - -import io.swagger.v3.oas.annotations.media.Schema; -import java.util.List; -import java.util.Map; -import org.apache.fineract.infrastructure.event.external.data.ExternalEventConfigurationItemData; - -final class ExternalEventConfigurationApiResourceSwagger { - - private ExternalEventConfigurationApiResourceSwagger() {} - - @Schema(description = "GetExternalEventConfigurationsResponse") - public static final class GetExternalEventConfigurationsResponse { - - private GetExternalEventConfigurationsResponse() {} - - public List externalEventConfiguration; - } - - @Schema(description = "PutExternalEventConfigurationsRequest") - public static final class PutExternalEventConfigurationsRequest { - - private PutExternalEventConfigurationsRequest() {} - - @Schema(example = "\"CentersCreateBusinessEvent\":true,\n" + "\"ClientActivateBusinessEvent\":true") - public Map externalEventConfigurations; - - } - -} diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/command/ExternalEventConfigurationCommand.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/command/ExternalEventConfigurationCommand.java index e172b70ec..ddb566eea 100644 --- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/command/ExternalEventConfigurationCommand.java +++ b/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/command/ExternalEventConfigurationCommand.java @@ -18,13 +18,13 @@ */ package org.apache.fineract.infrastructure.event.external.command; +import java.io.Serial; +import java.io.Serializable; import java.util.Map; -import lombok.AllArgsConstructor; -import lombok.Getter; -@AllArgsConstructor -@Getter -public class ExternalEventConfigurationCommand { +public record ExternalEventConfigurationCommand(Map externalEventConfigurations) implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; - private final Map externalEventConfigurations; } diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/service/ExternalEventConfigurationWritePlatformServiceImpl.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/service/ExternalEventConfigurationWritePlatformServiceImpl.java index ddaec0514..ed86d7ead 100644 --- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/service/ExternalEventConfigurationWritePlatformServiceImpl.java +++ b/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/service/ExternalEventConfigurationWritePlatformServiceImpl.java @@ -44,7 +44,7 @@ public class ExternalEventConfigurationWritePlatformServiceImpl implements Exter @Override public CommandProcessingResult updateConfigurations(final JsonCommand command) { final ExternalEventConfigurationCommand configurationCommand = fromApiJsonDeserializer.commandFromApiJson(command.json()); - final Map commandConfigurations = configurationCommand.getExternalEventConfigurations(); + final Map commandConfigurations = configurationCommand.externalEventConfigurations(); final Map changes = new HashMap<>(); final Map changedConfigurations = new HashMap<>(); final List modifiedConfigurations = new ArrayList<>(); diff --git a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/suite/ExternalEventSuiteInitializerStep.java b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/suite/ExternalEventSuiteInitializerStep.java index 1aebd6bb0..0ee6438d4 100644 --- a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/suite/ExternalEventSuiteInitializerStep.java +++ b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/initializer/suite/ExternalEventSuiteInitializerStep.java @@ -24,9 +24,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import lombok.RequiredArgsConstructor; +import org.apache.fineract.client.models.ExternalEventConfigurationCommand; +import org.apache.fineract.client.models.ExternalEventConfigurationData; import org.apache.fineract.client.models.ExternalEventConfigurationItemData; -import org.apache.fineract.client.models.GetExternalEventConfigurationsResponse; -import org.apache.fineract.client.models.PutExternalEventConfigurationsRequest; import org.apache.fineract.client.services.ExternalEventConfigurationApi; import org.springframework.stereotype.Component; import retrofit2.Response; @@ -41,7 +41,7 @@ public class ExternalEventSuiteInitializerStep implements FineractSuiteInitializ public void initializeForSuite() throws Exception { Map eventConfigMap = new HashMap<>(); - Response response = eventConfigurationApi.retrieveExternalEventConfiguration().execute(); + Response response = eventConfigurationApi.retrieveExternalEventConfiguration().execute(); if (!response.isSuccessful()) { String responseBody = response.errorBody().string(); throw new RuntimeException("Cannot configure external events due to " + lineSeparator() + responseBody); @@ -52,8 +52,7 @@ public class ExternalEventSuiteInitializerStep implements FineractSuiteInitializ eventConfigMap.put(e.getType(), true); }); - PutExternalEventConfigurationsRequest request = new PutExternalEventConfigurationsRequest() - .externalEventConfigurations(eventConfigMap); + ExternalEventConfigurationCommand request = new ExternalEventConfigurationCommand().externalEventConfigurations(eventConfigMap); eventConfigurationApi.updateExternalEventConfigurationsDetails(request).execute(); } diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/externalevents/ExternalEventHelper.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/externalevents/ExternalEventHelper.java index 728e10794..6d81d6409 100644 --- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/externalevents/ExternalEventHelper.java +++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/externalevents/ExternalEventHelper.java @@ -27,7 +27,7 @@ import java.util.Map; import lombok.Builder; import lombok.extern.slf4j.Slf4j; import org.apache.fineract.client.models.CommandProcessingResult; -import org.apache.fineract.client.models.PutExternalEventConfigurationsRequest; +import org.apache.fineract.client.models.ExternalEventConfigurationCommand; import org.apache.fineract.client.util.Calls; import org.apache.fineract.client.util.JSON; import org.apache.fineract.infrastructure.event.external.service.validation.ExternalEventDTO; @@ -124,7 +124,7 @@ public final class ExternalEventHelper { public void configureBusinessEvent(String eventName, boolean enabled) { CommandProcessingResult result = Calls .ok(FineractClientHelper.getFineractClient().externalEventConfigurationApi.updateExternalEventConfigurationsDetails( - new PutExternalEventConfigurationsRequest().putExternalEventConfigurationsItem(eventName, enabled))); + new ExternalEventConfigurationCommand().putExternalEventConfigurationsItem(eventName, enabled))); Map changes = result.getChanges(); Assertions.assertNotNull(changes); Assertions.assertInstanceOf(Map.class, changes);