Procesador de Solicitudes

El Procesador de Solicitudes es una parte del Procesador de Entradas de Pago, cuya función es procesar una Solicitud previamente construida.

El RequestProcessor la interfaz no especifica cómo debe ser el envío. Corresponde a la clase de implementación implementar la lógica de envío.

Ejemplos de implementaciones del Procesador de Solicitudes

Es posible considerar cómo podría verse una implementación, si estuviéramos procesando una solicitud para liberar un pago o para cancelar un pago.

Ejemplo de Procesador de Solicitudes de Pago

Si estamos procesando un pago, podríamos definir algo similar a esto:

package com.iconsolutions.ipf.core.releaser;

import com.iconsolutions.ipf.core.connector.SendConnector;
import com.iconsolutions.ipf.core.releaser.service.release.RequestProcessor;
import com.iconsolutions.ipf.core.shared.domain.context.UnitOfWorkId;
import com.iconsolutions.ipf.payments.credittransfer.executepayment.api.ExecutePaymentRequest;
import lombok.RequiredArgsConstructor;
import reactor.core.publisher.Mono;

@RequiredArgsConstructor
public class ExamplePaymentRequestProcessor implements RequestProcessor<ExecutePaymentRequest> {

    private final SendConnector<ExecutePaymentRequest, ExecutePaymentRequest> executePaymentSendConnector;

    @Override
    public Mono<UnitOfWorkId> process(ExecutePaymentRequest paymentRequest) {
        return Mono.fromCompletionStage(executePaymentSendConnector.send(paymentRequest.getProcessingContext(), paymentRequest))
                .handle((deliveryOutcome, sink) -> {
                    if (deliveryOutcome.getDeliveryReport().isSuccess()) {
                        sink.next(UnitOfWorkId.createRandom());
                    } else {
                        sink.error(deliveryOutcome.getDeliveryReport().getDeliveryException());
                    }
                });
    }
}

Aquí estamos manejando el envío de un EjecutarSolicitudDePago solicitud utilizando un conector y manejo de la respuesta.

Ejemplo de Procesador de Cancelación de Pagos

Si estamos cancelando un pago, podemos definir algo similar a esto:

package com.iconsolutions.ipf.core.releaser;

import com.iconsolutions.ipf.core.releaser.service.release.RequestProcessor;
import com.iconsolutions.ipf.core.shared.domain.context.UnitOfWorkId;
import exampledomain.domain.ExampleDomain;
import exampledomain.inputs.ExampleCancellationInput;
import reactor.core.publisher.Mono;

import java.util.UUID;

public class ExampleCancelRequestProcessor implements RequestProcessor<InitCancellationFlowRequest> {
    @Override
    public Mono<UnitOfWorkId> process(InitCancellationFlowRequest request) {
        var uofwid = request.getUnitOfWorkId();
        var exampleCancellationInput = new ExampleCancellationInput.Builder(uofwid.getValue())
                .build();

        return Mono.fromCompletionStage(
                ExampleDomain
                        .initiation()
                        .handle(exampleCancellationInput)
                        .thenApply(done -> uofwid)
        );
    }
}
package com.iconsolutions.ipf.core.releaser;

import com.iconsolutions.ipf.core.shared.domain.context.UnitOfWorkId;

@Getter
@Builder
public class InitCancellationFlowRequest {
    private UnitOfWorkId unitOfWorkId;
}

Aquí estamos manejando el procesamiento de un InitCancellationFlowRequest y pasándolo a un ExampleDomain para su procesamiento.

Al hacer esto, podría, por ejemplo, utilizarse para inicializar un Flujo de Cancelación.