policy.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package test
  2. import (
  3. "errors"
  4. "github.com/porter-dev/porter/internal/models"
  5. "github.com/porter-dev/porter/internal/repository"
  6. "gorm.io/gorm"
  7. )
  8. type PolicyRepository struct {
  9. canQuery bool
  10. policies []*models.Policy
  11. }
  12. // NewPolicyRepository returns a PolicyRepository which uses
  13. // gorm.DB for querying the database
  14. func NewPolicyRepository(canQuery bool) repository.PolicyRepository {
  15. return &PolicyRepository{
  16. canQuery: canQuery,
  17. }
  18. }
  19. func (repo *PolicyRepository) CreatePolicy(policy *models.Policy) (*models.Policy, error) {
  20. if !repo.canQuery {
  21. return nil, errors.New("cannot write database")
  22. }
  23. repo.policies = append(repo.policies, policy)
  24. policy.ID = uint(len(repo.policies))
  25. return policy, nil
  26. }
  27. func (repo *PolicyRepository) ListPoliciesByProjectID(projectID uint) ([]*models.Policy, error) {
  28. if !repo.canQuery {
  29. return nil, errors.New("cannot write database")
  30. }
  31. var res []*models.Policy
  32. for _, policy := range repo.policies {
  33. if policy.ProjectID == projectID {
  34. res = append(res, policy)
  35. }
  36. }
  37. return res, nil
  38. }
  39. func (repo *PolicyRepository) ReadPolicy(projectID uint, uid string) (*models.Policy, error) {
  40. if !repo.canQuery {
  41. return nil, errors.New("cannot write database")
  42. }
  43. for _, policy := range repo.policies {
  44. if policy.ProjectID == projectID && policy.UniqueID == uid {
  45. return policy, nil
  46. }
  47. }
  48. return nil, gorm.ErrRecordNotFound
  49. }
  50. func (repo *PolicyRepository) UpdatePolicy(
  51. policy *models.Policy,
  52. ) (*models.Policy, error) {
  53. if !repo.canQuery {
  54. return nil, errors.New("cannot write database")
  55. }
  56. for _, p := range repo.policies {
  57. if p.ID == policy.ID && p.UniqueID == policy.UniqueID {
  58. repo.policies[p.ID-1] = policy
  59. }
  60. }
  61. return nil, gorm.ErrRecordNotFound
  62. }
  63. func (repo *PolicyRepository) DeletePolicy(
  64. policy *models.Policy,
  65. ) (*models.Policy, error) {
  66. if !repo.canQuery {
  67. return nil, errors.New("cannot write database")
  68. }
  69. if policy == nil || int(policy.ID-1) >= len(repo.policies) || repo.policies[policy.ID-1] == nil {
  70. return nil, gorm.ErrRecordNotFound
  71. }
  72. var newPolicies []*models.Policy
  73. for _, p := range repo.policies {
  74. if p.UniqueID != policy.UniqueID {
  75. newPolicies = append(newPolicies, p)
  76. }
  77. }
  78. repo.policies = newPolicies
  79. return policy, nil
  80. }