project_role.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  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 ProjectRoleRepository struct {
  9. canQuery bool
  10. roles []*models.ProjectRole
  11. }
  12. func NewProjectRoleRepository(canQuery bool) repository.ProjectRoleRepository {
  13. return &ProjectRoleRepository{
  14. canQuery: canQuery,
  15. }
  16. }
  17. func (repo *ProjectRoleRepository) CreateProjectRole(role *models.ProjectRole) (*models.ProjectRole, error) {
  18. if !repo.canQuery {
  19. return nil, errors.New("cannot write database")
  20. }
  21. repo.roles = append(repo.roles, role)
  22. role.ID = uint(len(repo.roles))
  23. return role, nil
  24. }
  25. func (repo *ProjectRoleRepository) ReadProjectRole(projectID uint, roleUID string) (*models.ProjectRole, error) {
  26. if !repo.canQuery {
  27. return nil, errors.New("cannot write database")
  28. }
  29. for _, role := range repo.roles {
  30. if role.UniqueID == roleUID && role.ProjectID == projectID {
  31. return role, nil
  32. }
  33. }
  34. return nil, gorm.ErrRecordNotFound
  35. }
  36. func (repo *ProjectRoleRepository) ListProjectRoles(projectID uint) ([]*models.ProjectRole, error) {
  37. if !repo.canQuery {
  38. return nil, errors.New("cannot write database")
  39. }
  40. return repo.roles, nil
  41. }
  42. func (repo *ProjectRoleRepository) ListAllRolesForUser(projectID, userID uint) ([]*models.ProjectRole, error) {
  43. if !repo.canQuery {
  44. return nil, errors.New("cannot write database")
  45. }
  46. var res []*models.ProjectRole
  47. for _, role := range repo.roles {
  48. if role.ProjectID != projectID {
  49. continue
  50. }
  51. for _, u := range role.Users {
  52. if u.ID == userID {
  53. res = append(res, role)
  54. }
  55. }
  56. }
  57. return res, nil
  58. }
  59. func (repo *ProjectRoleRepository) UpdateUsersInProjectRole(projectID uint, roleUID string, userIDs []uint) error {
  60. if !repo.canQuery {
  61. return errors.New("cannot write database")
  62. }
  63. var role *models.ProjectRole
  64. for _, r := range repo.roles {
  65. if r.UniqueID == roleUID && r.ProjectID == projectID {
  66. role = r
  67. break
  68. }
  69. }
  70. if role == nil {
  71. return gorm.ErrRecordNotFound
  72. }
  73. role.Users = []models.User{}
  74. for _, userID := range userIDs {
  75. role.Users = append(role.Users, models.User{
  76. Model: gorm.Model{
  77. ID: userID,
  78. },
  79. })
  80. }
  81. return nil
  82. }
  83. func (repo *ProjectRoleRepository) ClearUsersInProjectRole(projectID uint, roleUID string) error {
  84. if !repo.canQuery {
  85. return errors.New("cannot write database")
  86. }
  87. var role *models.ProjectRole
  88. for _, r := range repo.roles {
  89. if r.UniqueID == roleUID && r.ProjectID == projectID {
  90. role = r
  91. break
  92. }
  93. }
  94. if role == nil {
  95. return gorm.ErrRecordNotFound
  96. }
  97. role.Users = []models.User{}
  98. return nil
  99. }
  100. func (repo *ProjectRoleRepository) UpdateProjectRole(role *models.ProjectRole) (*models.ProjectRole, error) {
  101. if !repo.canQuery {
  102. return nil, errors.New("cannot write database")
  103. }
  104. if role == nil || int(role.ID-1) >= len(repo.roles) || repo.roles[role.ID-1] == nil {
  105. return nil, gorm.ErrRecordNotFound
  106. }
  107. repo.roles[role.ID-1] = role
  108. return role, nil
  109. }
  110. func (repo *ProjectRoleRepository) DeleteProjectRole(role *models.ProjectRole) (*models.ProjectRole, error) {
  111. if !repo.canQuery {
  112. return nil, errors.New("cannot write database")
  113. }
  114. if role == nil || int(role.ID-1) >= len(repo.roles) || repo.roles[role.ID-1] == nil {
  115. return nil, gorm.ErrRecordNotFound
  116. }
  117. var newRoles []*models.ProjectRole
  118. for _, r := range repo.roles {
  119. if r.UniqueID != role.UniqueID {
  120. newRoles = append(newRoles, r)
  121. }
  122. }
  123. repo.roles = newRoles
  124. return role, nil
  125. }