Quellcode durchsuchen

add association from policy into project

Mohammed Nafees vor 3 Jahren
Ursprung
Commit
3eca36b533

+ 16 - 1
api/server/handlers/policy/delete.go

@@ -5,6 +5,7 @@ import (
 
 	"github.com/porter-dev/porter/api/server/handlers"
 	"github.com/porter-dev/porter/api/server/shared"
+	"github.com/porter-dev/porter/api/server/shared/apierrors"
 	"github.com/porter-dev/porter/api/server/shared/config"
 	"github.com/porter-dev/porter/api/server/shared/requestutils"
 	"github.com/porter-dev/porter/api/types"
@@ -38,6 +39,20 @@ func (p *PolicyDeleteHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
 	policy, err := p.Repo().Policy().ReadPolicy(proj.ID, policyID)
 
 	if err == nil {
-		p.Repo().Policy().DeletePolicy(policy)
+		policy, err = p.Repo().Policy().DeletePolicy(policy)
+
+		if err != nil {
+			p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
+			return
+		}
+	}
+
+	res, err := policy.ToAPIPolicyType()
+
+	if err != nil {
+		p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
+		return
 	}
+
+	p.WriteResult(w, r, res)
 }

+ 2 - 2
internal/models/project_role.go

@@ -8,11 +8,11 @@ type ProjectRole struct {
 	gorm.Model
 
 	ProjectID uint
-	PolicyID  uint
 
 	UniqueID string `gorm:"unique"`
 
 	Name string
 
-	Users []User `gorm:"many2many:user_roles"`
+	Policies []Policy `gorm:"many2many:role_policies"`
+	Users    []User   `gorm:"many2many:user_roles"`
 }

+ 37 - 7
internal/repository/gorm/policy.go

@@ -17,21 +17,34 @@ func NewPolicyRepository(db *gorm.DB) repository.PolicyRepository {
 	return &PolicyRepository{db}
 }
 
-func (repo *PolicyRepository) CreatePolicy(a *models.Policy) (*models.Policy, error) {
-	if err := repo.db.Create(a).Error; err != nil {
+func (repo *PolicyRepository) CreatePolicy(policy *models.Policy) (*models.Policy, error) {
+	var project models.Project
+
+	if err := repo.db.Where("id = ?", policy.ProjectID).First(&project).Error; err != nil {
+		return nil, err
+	}
+
+	assoc := repo.db.Model(&project).Association("ProjectPolicies")
+
+	if assoc.Error != nil {
+		return nil, assoc.Error
+	}
+
+	if err := assoc.Append(policy); err != nil {
 		return nil, err
 	}
-	return a, nil
+
+	return policy, nil
 }
 
 func (repo *PolicyRepository) ListPoliciesByProjectID(projectID uint) ([]*models.Policy, error) {
-	policys := []*models.Policy{}
+	var policies []*models.Policy
 
-	if err := repo.db.Where("project_id = ?", projectID).Find(&policys).Error; err != nil {
+	if err := repo.db.Where("project_id = ?", projectID).Find(&policies).Error; err != nil {
 		return nil, err
 	}
 
-	return policys, nil
+	return policies, nil
 }
 
 func (repo *PolicyRepository) ReadPolicy(projectID uint, uid string) (*models.Policy, error) {
@@ -57,8 +70,25 @@ func (repo *PolicyRepository) UpdatePolicy(
 func (repo *PolicyRepository) DeletePolicy(
 	policy *models.Policy,
 ) (*models.Policy, error) {
-	if err := repo.db.Delete(&policy).Error; err != nil {
+	var project models.Project
+
+	if err := repo.db.Where("id = ?", policy.ProjectID).First(&project).Error; err != nil {
 		return nil, err
 	}
+
+	assoc := repo.db.Model(&project).Association("ProjectPolicies")
+
+	if assoc.Error != nil {
+		return nil, assoc.Error
+	}
+
+	if err := assoc.Delete(policy); err != nil {
+		return nil, err
+	}
+
+	if err := repo.db.Delete(policy).Error; err != nil {
+		return nil, err
+	}
+
 	return policy, nil
 }