File size: 3,050 Bytes
5a22efd | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | 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,
}
}
|