user.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package repository
  2. import (
  3. "context"
  4. "github.com/go-nunu/nunu-layout-advanced/internal/model"
  5. "github.com/pkg/errors"
  6. "gorm.io/gorm"
  7. )
  8. type UserRepository interface {
  9. Create(ctx context.Context, user *model.User) error
  10. Update(ctx context.Context, user *model.User) error
  11. GetByID(ctx context.Context, id string) (*model.User, error)
  12. GetByUsername(ctx context.Context, username string) (*model.User, error)
  13. }
  14. func NewUserRepository(r *Repository) UserRepository {
  15. return &userRepository{
  16. Repository: r,
  17. }
  18. }
  19. type userRepository struct {
  20. *Repository
  21. }
  22. func (r *userRepository) Create(ctx context.Context, user *model.User) error {
  23. if err := r.db.Create(user).Error; err != nil {
  24. return errors.Wrap(err, "failed to create user")
  25. }
  26. return nil
  27. }
  28. func (r *userRepository) Update(ctx context.Context, user *model.User) error {
  29. if err := r.db.Save(user).Error; err != nil {
  30. return errors.Wrap(err, "failed to update user")
  31. }
  32. return nil
  33. }
  34. func (r *userRepository) GetByID(ctx context.Context, userId string) (*model.User, error) {
  35. var user model.User
  36. if err := r.db.Where("user_id = ?", userId).First(&user).Error; err != nil {
  37. return nil, errors.Wrap(err, "failed to get user by ID")
  38. }
  39. return &user, nil
  40. }
  41. func (r *userRepository) GetByUsername(ctx context.Context, username string) (*model.User, error) {
  42. var user model.User
  43. if err := r.db.Where("username = ?", username).First(&user).Error; err != nil {
  44. if err == gorm.ErrRecordNotFound {
  45. return nil, nil
  46. }
  47. return nil, errors.Wrap(err, "failed to get user by username")
  48. }
  49. return &user, nil
  50. }