storj/satellite/payments/billing/transactions.go

78 lines
2.8 KiB
Go
Raw Normal View History

// Copyright (C) 2022 Storj Labs, Inc.
// See LICENSE for copying information.
package billing
import (
"context"
"time"
"github.com/zeebo/errs"
"storj.io/common/uuid"
"storj.io/storj/satellite/payments/monetary"
)
// TransactionStatus indicates transaction status.
type TransactionStatus string
// ErrInsufficientFunds represents err when a user balance is too low for some transaction.
var ErrInsufficientFunds = errs.New("Insufficient funds for this transaction")
const (
// TransactionStatusPending indicates that status of this transaction is pending.
TransactionStatusPending = "pending"
// TransactionStatusCancelled indicates that status of this transaction is cancelled.
TransactionStatusCancelled = "cancelled"
// TransactionStatusCompleted indicates that status of this transaction is complete.
TransactionStatusCompleted = "complete"
)
// TransactionType indicates transaction type.
type TransactionType string
const (
// TransactionTypeCredit indicates that type of this transaction is credit.
TransactionTypeCredit = "credit"
// TransactionTypeDebit indicates that type of this transaction is debit.
TransactionTypeDebit = "debit"
// TransactionTypeUnknown indicates that type of this transaction is unknown.
TransactionTypeUnknown = "unknown"
)
// TransactionsDB is an interface which defines functionality
// of DB which stores billing transactions.
//
// architecture: Database
type TransactionsDB interface {
// Insert inserts the provided transaction.
Insert(ctx context.Context, tx Transaction) (txID int64, err error)
// InsertBatch inserts the provided transactions.
// Only transactions that increase the user balance can be inserted using batching.
InsertBatch(ctx context.Context, billingTXs []Transaction) (err error)
// UpdateStatus updates the status of the transaction.
UpdateStatus(ctx context.Context, txID int64, status TransactionStatus) error
// UpdateMetadata updates the metadata of the transaction.
UpdateMetadata(ctx context.Context, txID int64, metadata []byte) error
// LastTransaction returns the timestamp of the last known transaction for given source and type.
LastTransaction(ctx context.Context, txSource string, txType TransactionType) (time.Time, error)
// List returns all transactions for the specified user.
List(ctx context.Context, userID uuid.UUID) ([]Transaction, error)
// GetBalance returns the current usable balance for the specified user.
GetBalance(ctx context.Context, userID uuid.UUID) (int64, error)
}
// Transaction defines billing related transaction info that is stored in the DB.
type Transaction struct {
ID int64
UserID uuid.UUID
Amount monetary.Amount
Description string
Source string
Status TransactionStatus
Type TransactionType
Metadata []byte
Timestamp time.Time
CreatedAt time.Time
}