瀏覽代碼

Delete customer on project deletion, feature flags working

Mauricio Araujo 2 年之前
父節點
當前提交
24bb886748

+ 8 - 0
api/server/handlers/project/delete.go

@@ -92,6 +92,14 @@ func (p *ProjectDeleteHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
 		return
 	}
 
+	err = p.Config().BillingManager.DeleteCustomer(proj)
+	if err != nil {
+		e := "error deleting project in billing provider"
+		err = telemetry.Error(ctx, span, err, e)
+		p.HandleAPIError(w, r, apierrors.NewErrPassThroughToClient(err, http.StatusInternalServerError))
+		return
+	}
+
 	deletedProject, err := p.Repo().Project().DeleteProject(proj)
 	if err != nil {
 		e := "error deleting project"

+ 1 - 0
api/types/project.go

@@ -66,6 +66,7 @@ type Project struct {
 // retrieve feature flags from the `GET /projects/{project_id}` response instead
 type FeatureFlags struct {
 	AzureEnabled                    bool   `json:"azure_enabled,omitempty"`
+	BillingEnabled 									bool   `json:"billing_enabled,omitempty"`
 	CapiProvisionerEnabled          string `json:"capi_provisioner_enabled,omitempty"`
 	EnableReprovision               bool   `json:"enable_reprovision,omitempty"`
 	FullAddOns                      bool   `json:"full_add_ons,omitempty"`

+ 4 - 0
internal/billing/billing.go

@@ -32,6 +32,10 @@ func (s *NoopBillingManager) CreateCustomer(userEmail string, proj *models.Proje
 	return "", nil
 }
 
+func (s *NoopBillingManager) DeleteCustomer(proj *models.Project) (err error) {
+	return nil
+}
+
 // ListPaymentMethod is a no-op
 func (s *NoopBillingManager) ListPaymentMethod(proj *models.Project) (paymentMethods []types.PaymentMethod, err error) {
 	return []types.PaymentMethod{}, nil

+ 1 - 1
internal/billing/stripe.go

@@ -45,7 +45,7 @@ func (s *StripeBillingManager) CreateCustomer(userEmail string, proj *models.Pro
 func (s *StripeBillingManager) DeleteCustomer(proj *models.Project) (err error) {
 	stripe.Key = s.StripeSecretKey
 
-	if proj.BillingID == "" {
+	if proj.BillingID != "" {
 		params := &stripe.CustomerParams{}
 		_, err := customer.Del(proj.BillingID, params)
 		if err != nil {

+ 1 - 0
internal/models/project.go

@@ -338,6 +338,7 @@ func (p *Project) ToProjectListType() *types.ProjectList {
 		// note: all of these fields should be considered deprecated
 		// in an api response
 		Roles:                  roles,
+		BillingEnabled:         p.BillingEnabled,
 		PreviewEnvsEnabled:     p.PreviewEnvsEnabled,
 		RDSDatabasesEnabled:    p.RDSDatabasesEnabled,
 		ManagedInfraEnabled:    p.ManagedInfraEnabled,