user.go 2.6 KB

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