49 lines
2.1 KiB
Go
49 lines
2.1 KiB
Go
package storage
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/tech/sendico/gateway/tgsettle/storage/model"
|
|
"github.com/tech/sendico/pkg/merrors"
|
|
)
|
|
|
|
var ErrDuplicate = merrors.DataConflict("payment gateway storage: duplicate record")
|
|
|
|
type Repository interface {
|
|
Payments() PaymentsStore
|
|
TelegramConfirmations() TelegramConfirmationsStore
|
|
PendingConfirmations() PendingConfirmationsStore
|
|
TreasuryRequests() TreasuryRequestsStore
|
|
}
|
|
|
|
type PaymentsStore interface {
|
|
FindByIdempotencyKey(ctx context.Context, key string) (*model.PaymentRecord, error)
|
|
FindByOperationRef(ctx context.Context, key string) (*model.PaymentRecord, error)
|
|
Upsert(ctx context.Context, record *model.PaymentRecord) error
|
|
}
|
|
|
|
type TelegramConfirmationsStore interface {
|
|
Upsert(ctx context.Context, record *model.TelegramConfirmation) error
|
|
}
|
|
|
|
type PendingConfirmationsStore interface {
|
|
Upsert(ctx context.Context, record *model.PendingConfirmation) error
|
|
FindByRequestID(ctx context.Context, requestID string) (*model.PendingConfirmation, error)
|
|
FindByMessageID(ctx context.Context, messageID string) (*model.PendingConfirmation, error)
|
|
MarkClarified(ctx context.Context, requestID string) error
|
|
AttachMessage(ctx context.Context, requestID string, messageID string) error
|
|
DeleteByRequestID(ctx context.Context, requestID string) error
|
|
ListExpired(ctx context.Context, now time.Time, limit int64) ([]*model.PendingConfirmation, error)
|
|
}
|
|
|
|
type TreasuryRequestsStore interface {
|
|
Create(ctx context.Context, record *model.TreasuryRequest) error
|
|
FindByRequestID(ctx context.Context, requestID string) (*model.TreasuryRequest, error)
|
|
FindActiveByLedgerAccountID(ctx context.Context, ledgerAccountID string) (*model.TreasuryRequest, error)
|
|
FindDueByStatus(ctx context.Context, statuses []model.TreasuryRequestStatus, now time.Time, limit int64) ([]*model.TreasuryRequest, error)
|
|
ClaimScheduled(ctx context.Context, requestID string) (bool, error)
|
|
Update(ctx context.Context, record *model.TreasuryRequest) error
|
|
ListByAccountAndStatuses(ctx context.Context, ledgerAccountID string, statuses []model.TreasuryRequestStatus, dayStart, dayEnd time.Time) ([]*model.TreasuryRequest, error)
|
|
}
|