openmeter / app /common /taxcode.go
Leon4gr45's picture
Upload folder using huggingface_hub (part 4)
1f10f31 verified
Raw
History Blame Contribute Delete
2.13 kB
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,
})
}