billing.go 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package billing
  2. import (
  3. "context"
  4. "github.com/porter-dev/porter/api/types"
  5. "github.com/porter-dev/porter/internal/models"
  6. )
  7. // BillingManager contains methods for managing billing for a project
  8. type BillingManager interface {
  9. // CreateCustomer registers a project in the billing provider. This is currently a one-to-one
  10. // mapping with projects and billing customers, because billing and usage are set per project.
  11. CreateCustomer(ctx context.Context, userEmail string, proj *models.Project) (customerID string, err error)
  12. // DeleteCustomer will delete the customer from the billing provider
  13. DeleteCustomer(ctx context.Context, proj *models.Project) (err error)
  14. // CheckPaymentEnabled will check if the project has a payment method configured
  15. CheckPaymentEnabled(ctx context.Context, proj *models.Project) (paymentEnabled bool, err error)
  16. // ListPaymentMethod will return all payment methods for the project
  17. ListPaymentMethod(ctx context.Context, proj *models.Project) (paymentMethods []types.PaymentMethod, err error)
  18. // CreatePaymentMethod will add a new payment method to the project in Stripe
  19. CreatePaymentMethod(ctx context.Context, proj *models.Project) (clientSecret string, err error)
  20. // SetDefaultPaymentMethod will set the payment method as default in the customer invoice settings
  21. SetDefaultPaymentMethod(ctx context.Context, paymentMethodID string, proj *models.Project) (err error)
  22. // DeletePaymentMethod will remove a payment method for the project in Stripe
  23. DeletePaymentMethod(ctx context.Context, paymentMethodID string) (err error)
  24. // GetPublishableKey returns the key used to render frontend components for the billing manager
  25. GetPublishableKey(ctx context.Context) (key string)
  26. }
  27. // NoopBillingManager performs no billing operations
  28. type NoopBillingManager struct{}
  29. // CreateCustomer is a no-op
  30. func (s *NoopBillingManager) CreateCustomer(ctx context.Context, userEmail string, proj *models.Project) (customerID string, err error) {
  31. return "", nil
  32. }
  33. // DeleteCustomer is a no-op
  34. func (s *NoopBillingManager) DeleteCustomer(ctx context.Context, proj *models.Project) (err error) {
  35. return nil
  36. }
  37. // CheckPaymentEnabled is a no-op
  38. func (s *NoopBillingManager) CheckPaymentEnabled(ctx context.Context, proj *models.Project) (paymentEnabled bool, err error) {
  39. return false, nil
  40. }
  41. // ListPaymentMethod is a no-op
  42. func (s *NoopBillingManager) ListPaymentMethod(ctx context.Context, proj *models.Project) (paymentMethods []types.PaymentMethod, err error) {
  43. return []types.PaymentMethod{}, nil
  44. }
  45. // CreatePaymentMethod is a no-op
  46. func (s *NoopBillingManager) CreatePaymentMethod(ctx context.Context, proj *models.Project) (clientSecret string, err error) {
  47. return "", nil
  48. }
  49. // SetDefaultPaymentMethod is a no-op
  50. func (s *NoopBillingManager) SetDefaultPaymentMethod(ctx context.Context, paymentMethodID string, proj *models.Project) (err error) {
  51. return nil
  52. }
  53. // DeletePaymentMethod is a no-op
  54. func (s *NoopBillingManager) DeletePaymentMethod(ctx context.Context, paymentMethodID string) (err error) {
  55. return nil
  56. }
  57. // GetPublishableKey is a no-op
  58. func (s *NoopBillingManager) GetPublishableKey(ctx context.Context) (key string) {
  59. return ""
  60. }