package storage import ( "context" "github.com/tech/sendico/payments/orchestrator/storage/model" "go.mongodb.org/mongo-driver/bson/primitive" ) type storageError string func (e storageError) Error() string { return string(e) } var ( // ErrPaymentNotFound signals that a payment record does not exist. ErrPaymentNotFound = storageError("payments.orchestrator.storage: payment not found") // ErrDuplicatePayment signals that idempotency constraints were violated. ErrDuplicatePayment = storageError("payments.orchestrator.storage: duplicate payment") // ErrQuoteNotFound signals that a stored quote does not exist or expired. ErrQuoteNotFound = storageError("payments.orchestrator.storage: quote not found") // ErrDuplicateQuote signals that a quote reference already exists. ErrDuplicateQuote = storageError("payments.orchestrator.storage: duplicate quote") ) // Repository exposes persistence primitives for the orchestrator domain. type Repository interface { Ping(ctx context.Context) error Payments() PaymentsStore Quotes() QuotesStore } // PaymentsStore manages payment lifecycle state. type PaymentsStore interface { Create(ctx context.Context, payment *model.Payment) error Update(ctx context.Context, payment *model.Payment) error GetByPaymentRef(ctx context.Context, paymentRef string) (*model.Payment, error) GetByIdempotencyKey(ctx context.Context, orgRef primitive.ObjectID, idempotencyKey string) (*model.Payment, error) GetByChainTransferRef(ctx context.Context, transferRef string) (*model.Payment, error) List(ctx context.Context, filter *model.PaymentFilter) (*model.PaymentList, error) } // QuotesStore manages temporary stored payment quotes. type QuotesStore interface { Create(ctx context.Context, quote *model.PaymentQuoteRecord) error GetByRef(ctx context.Context, orgRef primitive.ObjectID, quoteRef string) (*model.PaymentQuoteRecord, error) }