mirror of
https://github.com/hanzo-fi/stack.git
synced 2026-10-30 20:34:43 +00:00
91 lines
2.6 KiB
Go
91 lines
2.6 KiB
Go
package analytics
|
|
|
|
import (
|
|
"context"
|
|
|
|
sharedapi "github.com/formancehq/stack/libs/go-libs/api"
|
|
|
|
"github.com/formancehq/ledger/internal/storage/systemstore"
|
|
|
|
storageerrors "github.com/formancehq/ledger/internal/storage/sqlutils"
|
|
|
|
"github.com/formancehq/ledger/internal/storage/driver"
|
|
ledgerstore "github.com/formancehq/ledger/internal/storage/ledgerstore"
|
|
"github.com/google/uuid"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
//go:generate mockgen -source backend.go -destination backend_test.go -package analytics . Ledger
|
|
|
|
type Ledger interface {
|
|
CountTransactions(ctx context.Context) (int, error)
|
|
CountAccounts(ctx context.Context) (int, error)
|
|
}
|
|
|
|
type defaultLedger struct {
|
|
store *ledgerstore.Store
|
|
}
|
|
|
|
func (d defaultLedger) CountTransactions(ctx context.Context) (int, error) {
|
|
return d.store.CountTransactions(ctx, ledgerstore.NewGetTransactionsQuery(ledgerstore.NewPaginatedQueryOptions(ledgerstore.PITFilterWithVolumes{})))
|
|
}
|
|
|
|
func (d defaultLedger) CountAccounts(ctx context.Context) (int, error) {
|
|
return d.store.CountAccounts(ctx, ledgerstore.NewGetAccountsQuery(ledgerstore.NewPaginatedQueryOptions(ledgerstore.PITFilterWithVolumes{})))
|
|
}
|
|
|
|
var _ Ledger = (*defaultLedger)(nil)
|
|
|
|
type Backend interface {
|
|
AppID(ctx context.Context) (string, error)
|
|
ListLedgers(ctx context.Context, query systemstore.ListLedgersQuery) (*sharedapi.Cursor[systemstore.Ledger], error)
|
|
GetLedgerStore(ctx context.Context, l string) (Ledger, error)
|
|
}
|
|
|
|
type defaultBackend struct {
|
|
driver *driver.Driver
|
|
appID string
|
|
}
|
|
|
|
func (d defaultBackend) AppID(ctx context.Context) (string, error) {
|
|
var err error
|
|
if d.appID == "" {
|
|
d.appID, err = d.driver.GetSystemStore().GetConfiguration(ctx, "appId")
|
|
if err != nil && !errors.Is(err, storageerrors.ErrNotFound) {
|
|
return "", err
|
|
}
|
|
if errors.Is(err, storageerrors.ErrNotFound) {
|
|
d.appID = uuid.NewString()
|
|
if err := d.driver.GetSystemStore().InsertConfiguration(ctx, "appId", d.appID); err != nil {
|
|
return "", err
|
|
}
|
|
}
|
|
}
|
|
return d.appID, nil
|
|
}
|
|
|
|
func (d defaultBackend) ListLedgers(ctx context.Context, query systemstore.ListLedgersQuery) (*sharedapi.Cursor[systemstore.Ledger], error) {
|
|
return d.driver.GetSystemStore().ListLedgers(ctx, query)
|
|
}
|
|
|
|
func (d defaultBackend) GetLedgerStore(ctx context.Context, name string) (Ledger, error) {
|
|
|
|
store, err := d.driver.GetLedgerStore(ctx, name)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &defaultLedger{
|
|
store: store,
|
|
}, nil
|
|
}
|
|
|
|
var _ Backend = (*defaultBackend)(nil)
|
|
|
|
func newDefaultBackend(driver *driver.Driver, appID string) *defaultBackend {
|
|
return &defaultBackend{
|
|
driver: driver,
|
|
appID: appID,
|
|
}
|
|
}
|