billing.go 2.8 KB

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