| package customerbilling | |
| import ( | |
| "context" | |
| "fmt" | |
| "github.com/openmeterio/openmeter/openmeter/app" | |
| "github.com/openmeterio/openmeter/openmeter/billing" | |
| "github.com/openmeterio/openmeter/openmeter/customer" | |
| customerapp "github.com/openmeterio/openmeter/openmeter/customer/app" | |
| "github.com/openmeterio/openmeter/pkg/models" | |
| ) | |
| func ValidateCustomerInvoicingApp(ctx context.Context, billingService billing.Service, customerID customer.CustomerID, capabilities []app.CapabilityType) error { | |
| if billingService == nil { | |
| return fmt.Errorf("billing service is required") | |
| } | |
| customerProfile, err := billingService.GetCustomerOverride(ctx, billing.GetCustomerOverrideInput{ | |
| Customer: customerID, | |
| Expand: billing.CustomerOverrideExpand{ | |
| Apps: true, | |
| Customer: true, | |
| }, | |
| }) | |
| if err != nil { | |
| return err | |
| } | |
| appBase := customerProfile.MergedProfile.Apps.Invoicing | |
| if appBase == nil { | |
| return models.NewGenericPreConditionFailedError( | |
| fmt.Errorf("customer with id %s has no invoicing app configured in namespace %s", customerID.ID, customerID.Namespace), | |
| ) | |
| } | |
| customerApp, err := customerapp.AsCustomerApp(appBase) | |
| if err != nil { | |
| return err | |
| } | |
| return customerApp.ValidateCustomer(ctx, customerProfile.Customer, capabilities) | |
| } | |