user.go 1.5 KB

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