storj/satellite/payments/storjscan/paymentsdb.go
Yaroslav Vorobiov 6d95e34e39 satellite/payments: add payments method for deposit wallets
Add payments method to payments to DepositWallets interface.
Exposes payments retrieval API for a particular wallet to
other systems such as console billing API.

Change-Id: Ifcb3a35514aab50be00f6360007954980b5d8b38
2022-07-12 11:25:30 +00:00

48 lines
1.8 KiB
Go

// Copyright (C) 2022 Storj Labs, Inc.
// See LICENSE for copying information.
package storjscan
import (
"context"
"time"
"github.com/zeebo/errs"
"storj.io/storj/private/blockchain"
"storj.io/storj/satellite/payments"
"storj.io/storj/satellite/payments/monetary"
)
// ErrNoPayments represents err when there is no payments in the DB.
var ErrNoPayments = errs.New("no payments in the database")
// PaymentsDB is storjscan payments DB interface.
//
// architecture: Database
type PaymentsDB interface {
// InsertBatch inserts list of payments into DB.
InsertBatch(ctx context.Context, payments []CachedPayment) error
// List returns list of all storjscan payments order by block number and log index desc mainly for testing.
List(ctx context.Context) ([]CachedPayment, error)
// ListWallet returns list of storjscan payments order by block number and log index desc.
ListWallet(ctx context.Context, wallet blockchain.Address, limit int, offset int64) ([]CachedPayment, error)
// LastBlock returns the highest block known to DB for specified payment status.
LastBlock(ctx context.Context, status payments.PaymentStatus) (int64, error)
// DeletePending removes all pending transactions from the DB.
DeletePending(ctx context.Context) error
}
// CachedPayment holds cached data of storjscan payment.
type CachedPayment struct {
From blockchain.Address `json:"from"`
To blockchain.Address `json:"to"`
TokenValue monetary.Amount `json:"tokenValue"`
Status payments.PaymentStatus `json:"status"`
BlockHash blockchain.Hash `json:"blockHash"`
BlockNumber int64 `json:"blockNumber"`
Transaction blockchain.Hash `json:"transaction"`
LogIndex int `json:"logIndex"`
Timestamp time.Time `json:"timestamp"`
}