user.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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. // UserRepository will return errors on queries if canQuery is false
  9. // and only stores a small set of users in-memory that are indexed by their
  10. // array index + 1
  11. type UserRepository struct {
  12. canQuery bool
  13. users []*models.User
  14. }
  15. // NewUserRepository will return errors
  16. func NewUserRepository(canQuery bool) repository.UserRepository {
  17. return &UserRepository{canQuery, []*models.User{}}
  18. }
  19. // CreateUser adds a new User row to the Users table in array memory
  20. func (repo *UserRepository) CreateUser(user *models.User) (*models.User, error) {
  21. if !repo.canQuery {
  22. return nil, errors.New("Cannot write database")
  23. }
  24. // make sure email doesn't exist
  25. for _, u := range repo.users {
  26. if u.Email == user.Email {
  27. return nil, errors.New("Cannot write database")
  28. }
  29. }
  30. users := repo.users
  31. users = append(users, user)
  32. repo.users = users
  33. user.ID = uint(len(repo.users))
  34. return user, nil
  35. }
  36. // ReadUser finds a single user based on their unique id
  37. func (repo *UserRepository) ReadUser(id uint) (*models.User, error) {
  38. if !repo.canQuery {
  39. return nil, errors.New("Cannot read from database")
  40. }
  41. if int(id-1) >= len(repo.users) || repo.users[id-1] == nil {
  42. return nil, gorm.ErrRecordNotFound
  43. }
  44. index := int(id - 1)
  45. return repo.users[index], nil
  46. }
  47. // ReadUserByEmail finds a single user based on their unique email
  48. func (repo *UserRepository) ReadUserByEmail(email string) (*models.User, error) {
  49. if !repo.canQuery {
  50. return nil, errors.New("Cannot read from database")
  51. }
  52. for _, u := range repo.users {
  53. if u.Email == email {
  54. return u, nil
  55. }
  56. }
  57. return nil, gorm.ErrRecordNotFound
  58. }
  59. // UpdateUser modifies an existing User in the database
  60. func (repo *UserRepository) UpdateUser(user *models.User) (*models.User, error) {
  61. if !repo.canQuery {
  62. return nil, errors.New("Cannot write database")
  63. }
  64. if int(user.ID-1) >= len(repo.users) || repo.users[user.ID-1] == nil {
  65. return nil, gorm.ErrRecordNotFound
  66. }
  67. index := int(user.ID - 1)
  68. oldUser := *repo.users[index]
  69. repo.users[index] = user
  70. user.Email = oldUser.Email
  71. user.Password = oldUser.Password
  72. return user, nil
  73. }
  74. // DeleteUser deletes a single user using their unique id
  75. func (repo *UserRepository) DeleteUser(user *models.User) (*models.User, error) {
  76. if !repo.canQuery {
  77. return nil, errors.New("Cannot write database")
  78. }
  79. if int(user.ID-1) >= len(repo.users) || repo.users[user.ID-1] == nil {
  80. return nil, gorm.ErrRecordNotFound
  81. }
  82. index := int(user.ID - 1)
  83. repo.users[index] = nil
  84. return user, nil
  85. }