openmeter / app /common /ledger.go
Leon4gr45's picture
Upload folder using huggingface_hub (part 4)
1f10f31 verified
Raw
History Blame Contribute Delete
4.17 kB
package common
import (
"context"
"github.com/google/wire"
"github.com/openmeterio/openmeter/app/config"
"github.com/openmeterio/openmeter/openmeter/customer"
entdb "github.com/openmeterio/openmeter/openmeter/ent/db"
"github.com/openmeterio/openmeter/openmeter/ledger"
ledgeraccount "github.com/openmeterio/openmeter/openmeter/ledger/account"
accountadapter "github.com/openmeterio/openmeter/openmeter/ledger/account/adapter"
accountservice "github.com/openmeterio/openmeter/openmeter/ledger/account/service"
historical "github.com/openmeterio/openmeter/openmeter/ledger/historical"
historicaladapter "github.com/openmeterio/openmeter/openmeter/ledger/historical/adapter"
ledgernoop "github.com/openmeterio/openmeter/openmeter/ledger/noop"
"github.com/openmeterio/openmeter/openmeter/ledger/resolvers"
resolversadapter "github.com/openmeterio/openmeter/openmeter/ledger/resolvers/adapter"
"github.com/openmeterio/openmeter/openmeter/ledger/routingrules"
"github.com/openmeterio/openmeter/openmeter/namespace"
"github.com/openmeterio/openmeter/pkg/framework/lockr"
)
type ledgerReadWriter interface {
ledger.Ledger
ledger.BalanceQuerier
}
type customerLedgerProvisioner interface {
ledger.AccountResolver
CreateCustomerAccounts(ctx context.Context, customerID customer.CustomerID) (ledger.CustomerAccounts, error)
}
// LedgerStack is the full provider set for the ledger stack.
// Callers must provide *entdb.Client and *lockr.Locker (e.g. via common.Lockr).
var LedgerStack = wire.NewSet(
NewLedgerRoutingValidator,
NewLedgerAccountRepo,
NewLedgerHistoricalRepo,
NewLedgerResolversRepo,
NewLedgerHistoricalLedger,
NewLedgerAccountService,
NewLedgerAccountCatalog,
NewLedgerAccountLocker,
NewLedgerBalanceQuerier,
NewLedgerAccountResolver,
NewLedgerService,
NewLedgerNamespaceHandler,
NewLedgerResolversService,
)
func NewLedgerRoutingValidator() ledger.RoutingValidator {
return routingrules.DefaultValidator
}
func NewLedgerAccountRepo(db *entdb.Client) ledgeraccount.Repo {
return accountadapter.NewRepo(db)
}
func NewLedgerHistoricalRepo(db *entdb.Client) historical.Repo {
return historicaladapter.NewRepo(db)
}
func NewLedgerResolversRepo(db *entdb.Client) resolvers.CustomerAccountRepo {
return resolversadapter.NewRepo(db)
}
func NewLedgerAccountService(
creditsConfig config.CreditsConfiguration,
repo ledgeraccount.Repo,
locker *lockr.Locker,
) ledgeraccount.Service {
if !creditsConfig.Enabled {
return ledgernoop.AccountService{}
}
return accountservice.New(repo, locker)
}
func NewLedgerHistoricalLedger(
creditsConfig config.CreditsConfiguration,
repo historical.Repo,
accountCatalog ledger.AccountCatalog,
accountLocker ledger.AccountLocker,
routingValidator ledger.RoutingValidator,
) ledgerReadWriter {
if !creditsConfig.Enabled {
return ledgernoop.Ledger{}
}
return historical.NewLedger(repo, accountCatalog, accountLocker, routingValidator)
}
func NewLedgerBalanceQuerier(historicalLedger ledgerReadWriter) ledger.BalanceQuerier {
return historicalLedger
}
func NewLedgerAccountCatalog(accountSvc ledgeraccount.Service) ledger.AccountCatalog {
return accountSvc
}
func NewLedgerAccountLocker(accountSvc ledgeraccount.Service) ledger.AccountLocker {
return accountSvc
}
func NewLedgerResolversService(
creditsConfig config.CreditsConfiguration,
accountSvc ledgeraccount.Service,
repo resolvers.CustomerAccountRepo,
locker *lockr.Locker,
) customerLedgerProvisioner {
if !creditsConfig.Enabled {
return ledgernoop.AccountResolver{}
}
return resolvers.NewAccountResolver(resolvers.AccountResolverConfig{
AccountService: accountSvc,
Repo: repo,
Locker: locker,
})
}
func NewLedgerAccountResolver(accountResolver customerLedgerProvisioner) ledger.AccountResolver {
return accountResolver
}
func NewLedgerService(historicalLedger ledgerReadWriter) ledger.Ledger {
return historicalLedger
}
func NewLedgerNamespaceHandler(accountResolver ledger.AccountResolver) namespace.Handler {
if _, ok := accountResolver.(ledgernoop.AccountResolver); ok {
return ledgernoop.NamespaceHandler{}
}
return resolvers.NewNamespaceHandler(accountResolver)
}