| 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) |
| } |
|
|
| |
| |
| 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) |
| } |
|
|