| package common |
|
|
| import ( |
| "log/slog" |
| "strings" |
|
|
| "github.com/google/wire" |
| "github.com/samber/lo" |
|
|
| "github.com/openmeterio/openmeter/app/config" |
| "github.com/openmeterio/openmeter/openmeter/app" |
| entdb "github.com/openmeterio/openmeter/openmeter/ent/db" |
| "github.com/openmeterio/openmeter/openmeter/taxcode" |
| taxcodeadapter "github.com/openmeterio/openmeter/openmeter/taxcode/adapter" |
| taxcodeservice "github.com/openmeterio/openmeter/openmeter/taxcode/service" |
| ) |
|
|
| var TaxCode = wire.NewSet( |
| NewTaxCodeAdapter, |
| NewTaxCodeService, |
| ) |
|
|
| var TaxCodeNamespaceHandler = wire.NewSet( |
| wire.FieldsOf(new(config.Configuration), "TaxCode"), |
| NewTaxCodeNamespaceHandler, |
| ) |
|
|
| func NewTaxCodeAdapter(logger *slog.Logger, db *entdb.Client) (taxcode.Repository, error) { |
| return taxcodeadapter.New(taxcodeadapter.Config{ |
| Client: db, |
| Logger: logger.With("subsystem", "taxcode"), |
| }) |
| } |
|
|
| func NewTaxCodeService( |
| logger *slog.Logger, |
| adapter taxcode.Repository, |
| ) (taxcode.Service, error) { |
| return taxcodeservice.New(taxcodeservice.Config{ |
| Adapter: adapter, |
| Logger: logger.With("subsystem", "taxcode"), |
| }) |
| } |
|
|
| func NewTaxCodeNamespaceHandler( |
| logger *slog.Logger, |
| service taxcode.Service, |
| repository taxcode.Repository, |
| cfg config.TaxCodeConfiguration, |
| ) (*taxcode.NamespaceHandler, error) { |
| seeds := lo.Map(cfg.Seeds, func(s config.TaxCodeSeed, _ int) taxcode.SeedEntry { |
| return taxcode.SeedEntry{ |
| Key: strings.TrimSpace(s.Key), |
| Name: strings.TrimSpace(s.Name), |
| Description: s.Description, |
| AppMappings: lo.Map(s.AppMappings, func(m config.TaxCodeAppMapping, _ int) taxcode.TaxCodeAppMapping { |
| return taxcode.TaxCodeAppMapping{ |
| AppType: app.AppType(strings.TrimSpace(m.AppType)), |
| TaxCode: strings.TrimSpace(m.TaxCode), |
| } |
| }), |
| DefaultInvoicing: s.DefaultInvoicing, |
| DefaultCreditGrant: s.DefaultCreditGrant, |
| } |
| }) |
|
|
| return taxcode.NewNamespaceHandler(taxcode.NamespaceHandlerConfig{ |
| Logger: logger.With("subsystem", "taxcode", "component", "namespace-handler"), |
| Service: service, |
| Seeds: seeds, |
| TransactionManager: repository, |
| }) |
| } |
|
|