FINERACT-2169: Apply dto for external event config api;

This commit is contained in:
viktorpavlenko
2025-03-19 12:13:21 +01:00
committed by Adam Saghy
parent 9fe993342b
commit 84c101ab14
6 changed files with 22 additions and 91 deletions
@@ -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<String> 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<ExternalEventConfigurationData> 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);
}
}
@@ -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<ExternalEventConfigurationItemData> externalEventConfiguration;
}
@Schema(description = "PutExternalEventConfigurationsRequest")
public static final class PutExternalEventConfigurationsRequest {
private PutExternalEventConfigurationsRequest() {}
@Schema(example = "\"CentersCreateBusinessEvent\":true,\n" + "\"ClientActivateBusinessEvent\":true")
public Map<String, Boolean> externalEventConfigurations;
}
}
@@ -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<String, Boolean> externalEventConfigurations) implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
private final Map<String, Boolean> externalEventConfigurations;
}
@@ -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<String, Boolean> commandConfigurations = configurationCommand.getExternalEventConfigurations();
final Map<String, Boolean> commandConfigurations = configurationCommand.externalEventConfigurations();
final Map<String, Object> changes = new HashMap<>();
final Map<String, Boolean> changedConfigurations = new HashMap<>();
final List<ExternalEventConfiguration> modifiedConfigurations = new ArrayList<>();
@@ -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<String, Boolean> eventConfigMap = new HashMap<>();
Response<GetExternalEventConfigurationsResponse> response = eventConfigurationApi.retrieveExternalEventConfiguration().execute();
Response<ExternalEventConfigurationData> 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();
}
@@ -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<String, Object> changes = result.getChanges();
Assertions.assertNotNull(changes);
Assertions.assertInstanceOf(Map.class, changes);