| package httpdriver |
|
|
| import ( |
| "errors" |
| "fmt" |
|
|
| "github.com/samber/lo" |
|
|
| "github.com/openmeterio/openmeter/api" |
| "github.com/openmeterio/openmeter/openmeter/app" |
| appcustominvoicing "github.com/openmeterio/openmeter/openmeter/app/custominvoicing" |
| appsandbox "github.com/openmeterio/openmeter/openmeter/app/sandbox" |
| appstripe "github.com/openmeterio/openmeter/openmeter/app/stripe" |
| ) |
|
|
| |
| func MapAppToAPI(item app.App) (api.App, error) { |
| if item == nil { |
| return api.App{}, errors.New("invalid app: nil") |
| } |
|
|
| switch item.GetType() { |
| case app.AppTypeStripe: |
| stripeApp := item.(appstripe.App) |
|
|
| app := api.App{} |
| if err := app.FromStripeApp(mapStripeAppToAPI(stripeApp.Meta)); err != nil { |
| return app, err |
| } |
|
|
| return app, nil |
| case app.AppTypeSandbox: |
| sandboxApp := item.(appsandbox.App) |
|
|
| app := api.App{} |
| if err := app.FromSandboxApp(mapSandboxAppToAPI(sandboxApp.Meta)); err != nil { |
| return app, err |
| } |
|
|
| return app, nil |
| case app.AppTypeCustomInvoicing: |
| customInvoicingApp := item.(appcustominvoicing.App) |
|
|
| app := api.App{} |
| if err := app.FromCustomInvoicingApp(mapCustomInvoicingAppToAPI(customInvoicingApp.Meta)); err != nil { |
| return app, err |
| } |
|
|
| return app, nil |
| default: |
| return api.App{}, fmt.Errorf("unsupported app type: %s", item.GetType()) |
| } |
| } |
|
|
| func mapSandboxAppToAPI(app appsandbox.Meta) api.SandboxApp { |
| return api.SandboxApp{ |
| Id: app.GetID().ID, |
| Type: api.SandboxAppTypeSandbox, |
| Name: app.GetName(), |
| Status: api.AppStatus(app.GetStatus()), |
| Listing: mapMarketplaceListing(app.GetListing()), |
| CreatedAt: app.CreatedAt, |
| UpdatedAt: app.UpdatedAt, |
| DeletedAt: app.DeletedAt, |
| } |
| } |
|
|
| func mapStripeAppToAPI( |
| stripeApp appstripe.Meta, |
| ) api.StripeApp { |
| apiStripeApp := api.StripeApp{ |
| Id: stripeApp.GetID().ID, |
| Type: api.StripeAppType(stripeApp.GetType()), |
| Name: stripeApp.Name, |
| Status: api.AppStatus(stripeApp.GetStatus()), |
| Listing: mapMarketplaceListing(stripeApp.GetListing()), |
| MaskedAPIKey: stripeApp.MaskedAPIKey, |
| CreatedAt: stripeApp.CreatedAt, |
| UpdatedAt: stripeApp.UpdatedAt, |
| DeletedAt: stripeApp.DeletedAt, |
| StripeAccountId: stripeApp.StripeAccountID, |
| Livemode: stripeApp.Livemode, |
| } |
|
|
| apiStripeApp.Description = stripeApp.GetDescription() |
|
|
| if stripeApp.GetMetadata() != nil { |
| apiStripeApp.Metadata = lo.ToPtr(api.Metadata(stripeApp.GetMetadata())) |
| } |
|
|
| return apiStripeApp |
| } |
|
|
| func mapCustomInvoicingAppToAPI(app appcustominvoicing.Meta) api.CustomInvoicingApp { |
| return api.CustomInvoicingApp{ |
| Id: app.GetID().ID, |
| Type: api.CustomInvoicingAppTypeCustomInvoicing, |
| Name: app.GetName(), |
| Status: api.AppStatus(app.GetStatus()), |
| Listing: mapMarketplaceListing(app.GetListing()), |
| Metadata: lo.EmptyableToPtr(api.Metadata(app.GetMetadata())), |
| Description: app.GetDescription(), |
| CreatedAt: app.CreatedAt, |
| UpdatedAt: app.UpdatedAt, |
| DeletedAt: app.DeletedAt, |
|
|
| EnableDraftSyncHook: app.Configuration.EnableDraftSyncHook, |
| EnableIssuingSyncHook: app.Configuration.EnableIssuingSyncHook, |
| } |
| } |
|
|
| func MapEventAppToAPI(event app.EventApp) (api.App, error) { |
| switch event.GetType() { |
| case app.AppTypeStripe: |
| target := appstripe.App{} |
| if err := target.FromEventAppData(event); err != nil { |
| return api.App{}, err |
| } |
|
|
| app := api.App{} |
| if err := app.FromStripeApp(mapStripeAppToAPI(target.Meta)); err != nil { |
| return api.App{}, err |
| } |
|
|
| return app, nil |
| case app.AppTypeSandbox: |
| target := appsandbox.Meta{} |
| if err := target.FromEventAppData(event); err != nil { |
| return api.App{}, err |
| } |
|
|
| app := api.App{} |
| if err := app.FromSandboxApp(mapSandboxAppToAPI(target)); err != nil { |
| return api.App{}, err |
| } |
|
|
| return app, nil |
| case app.AppTypeCustomInvoicing: |
| target := appcustominvoicing.App{} |
| if err := target.FromEventAppData(event); err != nil { |
| return api.App{}, err |
| } |
|
|
| app := api.App{} |
| if err := app.FromCustomInvoicingApp(mapCustomInvoicingAppToAPI(target.Meta)); err != nil { |
| return api.App{}, err |
| } |
|
|
| return app, nil |
| default: |
| return api.App{}, fmt.Errorf("unsupported app type: %s", event.GetType()) |
| } |
| } |
|
|
| |
| func fromAPIAppStripeCustomerData(apiStripeCustomerData api.StripeCustomerAppData) appstripe.CustomerData { |
| return appstripe.CustomerData{ |
| StripeCustomerID: apiStripeCustomerData.StripeCustomerId, |
| StripeDefaultPaymentMethodID: apiStripeCustomerData.StripeDefaultPaymentMethodId, |
| } |
| } |
|
|
| |
| func ToAPIStripeCustomerAppData( |
| customerAppData appstripe.CustomerData, |
| stripeApp appstripe.App, |
| ) api.StripeCustomerAppData { |
| apiStripeCustomerAppData := api.StripeCustomerAppData{ |
| Id: lo.ToPtr(stripeApp.GetID().ID), |
| Type: api.StripeCustomerAppDataTypeStripe, |
| App: lo.ToPtr(mapStripeAppToAPI(stripeApp.Meta)), |
| StripeCustomerId: customerAppData.StripeCustomerID, |
| StripeDefaultPaymentMethodId: customerAppData.StripeDefaultPaymentMethodID, |
| } |
|
|
| return apiStripeCustomerAppData |
| } |
|
|