user.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package dbstore
  2. import (
  3. "git.linuxforward.com/byop/byop-engine/dbmanager"
  4. "git.linuxforward.com/byop/byop-engine/models"
  5. "github.com/google/uuid"
  6. "gorm.io/gorm"
  7. )
  8. // UserStore handles database operations for users
  9. type UserStore struct {
  10. db *gorm.DB
  11. }
  12. // NewUserStore creates a new UserStore
  13. func NewUserStore(dbManager dbmanager.DbManager) *UserStore {
  14. return &UserStore{
  15. db: dbManager.GetDB(),
  16. }
  17. }
  18. // Create creates a new user
  19. func (us *UserStore) Create(user *models.User) error {
  20. // Generate ID if not provided
  21. if user.ID == "" {
  22. user.ID = uuid.New().String()
  23. }
  24. // GORM will handle created_at and updated_at automatically
  25. return us.db.Create(user).Error
  26. }
  27. // GetByID retrieves a user by ID
  28. func (us *UserStore) GetByID(id string) (*models.User, error) {
  29. var user models.User
  30. result := us.db.First(&user, "id = ?", id)
  31. if result.Error != nil {
  32. if result.Error == gorm.ErrRecordNotFound {
  33. return nil, nil // No user found
  34. }
  35. return nil, result.Error
  36. }
  37. return &user, nil
  38. }
  39. // GetByUsername retrieves a user by ID
  40. func (us *UserStore) GetByUsername(id string) (*models.User, error) {
  41. var user models.User
  42. result := us.db.First(&user, "username = ?", id)
  43. if result.Error != nil {
  44. if result.Error == gorm.ErrRecordNotFound {
  45. return nil, nil // No user found
  46. }
  47. return nil, result.Error
  48. }
  49. return &user, nil
  50. }
  51. // ListDeploymentsByUserID retrieves all deployments for a user by ID
  52. func (us *UserStore) ListDeploymentsByUserID(userID string) ([]*models.Deployment, error) {
  53. var deployments []*models.Deployment
  54. result := us.db.Where("user_id = ?", userID).Find(&deployments)
  55. if result.Error != nil {
  56. return nil, result.Error
  57. }
  58. return deployments, nil
  59. }
  60. // Update updates an existing user
  61. func (us *UserStore) Update(user *models.User) error {
  62. return us.db.Save(user).Error
  63. }
  64. // Delete deletes a user by ID
  65. func (us *UserStore) Delete(id string) error {
  66. return us.db.Delete(&models.User{}, "id = ?", id).Error
  67. }
  68. // List retrieves all users with optional filtering
  69. func (us *UserStore) List(filter map[string]interface{}) ([]*models.User, error) {
  70. var users []*models.User
  71. // Build query from filters
  72. query := us.db
  73. if filter != nil {
  74. for key, value := range filter {
  75. query = query.Where(key+" = ?", value)
  76. }
  77. }
  78. // Execute query
  79. if err := query.Find(&users).Error; err != nil {
  80. return nil, err
  81. }
  82. return users, nil
  83. }
  84. // GetUserByEmail retrieves a user by email
  85. func (us *UserStore) GetUserByEmail(email string) (*models.User, error) {
  86. var user models.User
  87. result := us.db.Where("email = ?", email).First(&user)
  88. if result.Error != nil {
  89. if result.Error == gorm.ErrRecordNotFound {
  90. return nil, nil // No user found
  91. }
  92. return nil, result.Error
  93. }
  94. return &user, nil
  95. }