| package httpdriver |
|
|
| import ( |
| "context" |
| "errors" |
| "log/slog" |
| "net/http" |
|
|
| "github.com/openmeterio/openmeter/app/config" |
| "github.com/openmeterio/openmeter/openmeter/app" |
| appstripe "github.com/openmeterio/openmeter/openmeter/app/stripe" |
| "github.com/openmeterio/openmeter/openmeter/billing" |
| billingcharges "github.com/openmeterio/openmeter/openmeter/billing/charges" |
| "github.com/openmeterio/openmeter/openmeter/namespace/namespacedriver" |
| "github.com/openmeterio/openmeter/pkg/featuregate" |
| "github.com/openmeterio/openmeter/pkg/framework/commonhttp" |
| "github.com/openmeterio/openmeter/pkg/framework/transport/httptransport" |
| ) |
|
|
| type Handler interface { |
| ProfileHandler |
| InvoiceLineHandler |
| InvoiceHandler |
| CustomerOverrideHandler |
| } |
|
|
| type ProfileHandler interface { |
| CreateProfile() CreateProfileHandler |
| GetProfile() GetProfileHandler |
| DeleteProfile() DeleteProfileHandler |
| UpdateProfile() UpdateProfileHandler |
| ListProfiles() ListProfilesHandler |
| } |
|
|
| type InvoiceLineHandler interface { |
| CreatePendingLine() CreatePendingLineHandler |
| } |
|
|
| type InvoiceHandler interface { |
| ListInvoices() ListInvoicesHandler |
| InvoicePendingLinesAction() InvoicePendingLinesActionHandler |
| DeleteInvoice() DeleteInvoiceHandler |
| GetInvoice() GetInvoiceHandler |
| UpdateInvoice() UpdateInvoiceHandler |
| ProgressInvoice(ProgressAction) ProgressInvoiceHandler |
| SimulateInvoice() SimulateInvoiceHandler |
| } |
|
|
| type CustomerOverrideHandler interface { |
| ListCustomerOverrides() ListCustomerOverridesHandler |
| UpsertCustomerOverride() UpsertCustomerOverrideHandler |
| GetCustomerOverride() GetCustomerOverrideHandler |
| DeleteCustomerOverride() DeleteCustomerOverrideHandler |
| } |
|
|
| type handler struct { |
| service billing.Service |
| chargeService billingcharges.ChargeService |
| appService app.Service |
| logger *slog.Logger |
| namespaceDecoder namespacedriver.NamespaceDecoder |
| featureSwitches config.BillingFeatureSwitchesConfiguration |
| credits config.CreditsConfiguration |
| featureGate *featuregate.FeatureGateChecker |
| options []httptransport.HandlerOption |
| } |
|
|
| func (h *handler) resolveNamespace(ctx context.Context) (string, error) { |
| ns, ok := h.namespaceDecoder.GetNamespace(ctx) |
| if !ok { |
| return "", commonhttp.NewHTTPError(http.StatusInternalServerError, errors.New("internal server error")) |
| } |
|
|
| return ns, nil |
| } |
|
|
| func New( |
| logger *slog.Logger, |
| namespaceDecoder namespacedriver.NamespaceDecoder, |
| featureSwitches config.BillingFeatureSwitchesConfiguration, |
| service billing.Service, |
| appService app.Service, |
| stripeAppService appstripe.Service, |
| chargeService billingcharges.ChargeService, |
| credits config.CreditsConfiguration, |
| featureGate *featuregate.FeatureGateChecker, |
| options ...httptransport.HandlerOption, |
| ) Handler { |
| return &handler{ |
| service: service, |
| chargeService: chargeService, |
| appService: appService, |
| logger: logger, |
| namespaceDecoder: namespaceDecoder, |
| options: options, |
| featureSwitches: featureSwitches, |
| credits: credits, |
| featureGate: featureGate, |
| } |
| } |
|
|