openmeter / app /common /customer.go
Leon4gr45's picture
Upload folder using huggingface_hub (part 4)
1f10f31 verified
Raw
History Blame Contribute Delete
3.7 kB
package common
import (
"fmt"
"log/slog"
"github.com/google/wire"
"go.opentelemetry.io/otel/trace"
"github.com/openmeterio/openmeter/app/config"
"github.com/openmeterio/openmeter/openmeter/billing"
"github.com/openmeterio/openmeter/openmeter/customer"
customeradapter "github.com/openmeterio/openmeter/openmeter/customer/adapter"
customerservice "github.com/openmeterio/openmeter/openmeter/customer/service"
customerservicehooks "github.com/openmeterio/openmeter/openmeter/customer/service/hooks"
entdb "github.com/openmeterio/openmeter/openmeter/ent/db"
ledgerresolvers "github.com/openmeterio/openmeter/openmeter/ledger/resolvers"
"github.com/openmeterio/openmeter/openmeter/registry"
"github.com/openmeterio/openmeter/openmeter/subject"
"github.com/openmeterio/openmeter/openmeter/watermill/eventbus"
)
var Customer = wire.NewSet(
NewCustomerService,
)
func NewCustomerService(
logger *slog.Logger,
db *entdb.Client,
eventPublisher eventbus.Publisher,
) (customer.Service, error) {
customerAdapter, err := customeradapter.New(customeradapter.Config{
Client: db,
Logger: logger.WithGroup("customer.postgres"),
})
if err != nil {
return nil, fmt.Errorf("failed to create customer adapter: %w", err)
}
service, err := customerservice.New(customerservice.Config{
Adapter: customerAdapter,
Publisher: eventPublisher,
})
if err != nil {
return nil, fmt.Errorf("failed to create customer service: %w", err)
}
return service, nil
}
type CustomerSubjectHook customerservicehooks.SubjectCustomerHook
type CustomerLedgerHook ledgerresolvers.CustomerLedgerHook
func NewCustomerLedgerServiceHook(
creditsConfig config.CreditsConfiguration,
tracer trace.Tracer,
accountResolver customerLedgerProvisioner,
customerService customer.Service,
) (CustomerLedgerHook, error) {
if !creditsConfig.Enabled {
return ledgerresolvers.NoopCustomerLedgerHook{}, nil
}
h, err := ledgerresolvers.NewCustomerLedgerHook(ledgerresolvers.CustomerLedgerHookConfig{
Service: accountResolver,
Tracer: tracer,
})
if err != nil {
return nil, fmt.Errorf("failed to create customer ledger hook: %w", err)
}
customerService.RegisterHooks(h)
return h, nil
}
func NewCustomerSubjectServiceHook(
config config.CustomerConfiguration,
logger *slog.Logger,
tracer trace.Tracer,
subjectService subject.Service,
customerService customer.Service,
customerOverrideService billing.CustomerOverrideService,
) (CustomerSubjectHook, error) {
if !config.EnableSubjectHook {
return new(customerservicehooks.NoopSubjectCustomerHook), nil
}
// Initialize the subject customer hook and register it for Subject service
h, err := customerservicehooks.NewSubjectCustomerHook(customerservicehooks.SubjectCustomerHookConfig{
Customer: customerService,
CustomerOverride: customerOverrideService,
Logger: logger,
Tracer: tracer,
IgnoreErrors: config.IgnoreErrors,
})
if err != nil {
return nil, fmt.Errorf("failed to create customer subject hook: %w", err)
}
subjectService.RegisterHooks(h)
return h, nil
}
type CustomerEntitlementValidatorHook customerservicehooks.EntitlementValidatorHook
func NewCustomerEntitlementValidatorServiceHook(
logger *slog.Logger,
entitlementRegistry *registry.Entitlement,
customerService customer.Service,
) (CustomerEntitlementValidatorHook, error) {
h, err := customerservicehooks.NewEntitlementValidatorHook(customerservicehooks.EntitlementValidatorHookConfig{
EntitlementService: entitlementRegistry.Entitlement,
})
if err != nil {
return nil, fmt.Errorf("failed to create customer entitlement validator hook: %w", err)
}
customerService.RegisterHooks(h)
return h, nil
}