Almacén de Pagos

El Almacén de Pagos IPF es una interfaz diseñada para almacenar y consultar datos relacionados con scheduled pagos. Permite el almacenamiento de pagos creados en el presente, pero scheduled para su procesamiento en un momento posterior.

El Almacén de Pagos opera como un MongoDB(incluyendo soporte para Azure Cosmos para MongoDB) interfaz de colección, facilitando el almacenamiento de detalles de pago en varias formas, incluyendo Bulk, Lote, y Transacción.

características principales

  • Almacenamiento: Capaz de almacenar información de pago detallada.

  • Consulta: Proporciona métodos para recuperar y gestionar los pagos almacenados.

  • Purgado: Proporciona configuración para purgar la información de pago almacenada. == API Descripción general

The Payment Warehouse API incluye lo siguiente core métodos:

package com.iconsolutions.ipf.core.warehouse.port;

import com.iconsolutions.ipf.core.shared.domain.context.UnitOfWorkId;
import com.iconsolutions.ipf.warehouse.PaymentEntry;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

import java.util.List;
import java.util.Optional;

public interface PaymentWarehouse {

    Mono<PaymentEntry> save(PaymentEntry paymentEntry);
    Flux<PaymentEntry> findAllByUnitOfWorkId(UnitOfWorkId unitOfWorkId);
    Mono<Long> countRelatedUnitOfWorkIds(UnitOfWorkId unitOfWorkId);
    Flux<UnitOfWorkId> findRelatedUnitOfWorkIds(UnitOfWorkId unitOfWorkId, Pageable pageable);
    Flux<List<PaymentEntry>> findAllByUnitOfWorkIds(List<UnitOfWorkId> unitOfWorkIds);
    Flux<List<PaymentEntry>> findAllByRelatedUnitOfWorkId(UnitOfWorkId relatedUnitOfWorkId, Optional<UnitOfWorkId> offset);
    Mono<Void> markBatchAsDone(UnitOfWorkId unitOfWorkId);
}

A continuación se presenta una descripción detallada de los métodos proporcionados por la API:

  • save: Persiste los datos de pago en el almacén. Soporta el almacenamiento de datos para bulk, procesos de lote y transacción.

  • findAllByUnitOfWorkId: Recupera todas las entradas de pago asociadas con un específico UnitOfWorkId. Se utiliza para obtener el conjunto completo de pagos instructions para un dado unit of work.

  • countRelatedUnitOfWorkIds: Devuelve el conteo de relacionados únicos unit of work IDs para un especificado UnitOfWorkId. Útil para determinar la extensión de las unidades de trabajo relacionadas.

  • findRelatedUnitOfWorkIds: Recupera una lista paginada de UnitOfWorkIds relacionados para un dado UnitOfWorkId. Ayuda a navegar a través de unidades de trabajo relacionadas, particularmente en conjuntos de datos grandes.

  • findAllByUnitOfWorkIds: Obtiene las entradas de pago correspondientes a una lista de UnitOfWorkIds. Recupera los detalles de transacción para múltiples unidades de trabajo en una sola llamada.

  • findAllByRelatedUnitOfWorkId: Recupera las entradas de pago que están relacionadas con el mismo UnitOfWorkId. Las entradas de pago con el mismo UnitOfWorkId están agrupados en una Lista.

  • markBatchAsDone: Marca un Lote específico y su asociación de Transacciones como 'hecho'. Activa cualquier necesario mantenimiento operaciones, como la eliminación de entradas de pago que ya no son necesarias.

Métodos findRelatedUnitOfWorkIds,findAllByUnitOfWorkIds,countRelatedUnitOfWorkIds están obsoletos.

Estructura de Entrada de Pago

The PaymentEntry la clase representa los documentos almacenados y consultados por el Almacén de Pagos:

package com.iconsolutions.ipf.core.warehouse;

import com.iconsolutions.ipf.core.shared.domain.context.ProcessingContext;
import com.iconsolutions.ipf.core.shared.domain.context.UnitOfWorkId;
import lombok.Builder;
import lombok.Data;

import java.time.Instant;
import java.util.List;

@Data
@Builder
public class PaymentEntry {
    private PaymentEntryId id;
    private ProcessingContext processingContext;
    private UnitOfWorkId relatedUnitOfWorkId;
    private String globalState;
    private PaymentEntryType type;
    private List<BusinessDataEntry> data;
    /**
     * TTL represents time in seconds after which the record will expire.
     * This field is unique to Azure CosmosDB (must be an int named ttl)
     */
    private Integer ttl;
    /**
     * Represents exact instant when this task is eligible for deletion.
     * MongoDB requires field to be date type.
     */
    private Instant expiryDate;
}

El BusinessDataEntry representa específico del cliente business data:

package com.iconsolutions.ipf.core.warehouse;

import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class BusinessDataEntry {

    private String objectId;
    private String parentObjectId;
    private String name;
    private String version;
    private Category category;
    private Class<?> contentType;
    private String content;

    public enum Category {
        MDS, PDS, DOMAIN_EVENT;
    }
}

MongoDB Representación

El correspondiente MongoDB representación de PaymentEntry se define en el MongoPaymentEntry clase:

package com.iconsolutions.ipf.core.warehouse.port.mongo.repository;

import lombok.Builder;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import java.time.Instant;
import java.util.List;

@Document(collection = "paymententries")
@Data
@Builder
public class MongoPaymentEntry {
    @Id
    private String id;
    private String unitOfWorkId;
    private String relatedUnitOfWork;
    private String clientRequestId;
    private String associationId;
    private String processingEntity;
    private Integer sequence;
    private String globalState;
    private String type;
    /**
     * TTL represents time in seconds after which the record will expire.
     * This field is unique to Azure CosmosDB (must be an int named "ttl")
     */
    private Integer ttl;
    /**
     * Represents exact instant when this task is eligible for deletion.
     * MongoDB requires field to be date type.
     */
    private Instant expiryDate;
    private List<MongoBusinessDataEntry> data;
}

El correspondiente MongoDB representación de BusinessDataEntry se define en el MongoBusinessDataEntry clase:

package com.iconsolutions.ipf.core.warehouse.port.mongo.repository;

import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class MongoBusinessDataEntry {
    private String objectId;
    private String parentObjectId;
    private String name;
    private String version;
    private String category;
    private String contentType;
    private String content;
}