package repository import ( "context" "errors" v1 "github.com/go-nunu/nunu-layout-advanced/api/v1" "github.com/go-nunu/nunu-layout-advanced/internal/model" "gorm.io/gorm" ) type UserRepository interface { Create(ctx context.Context, user *model.User) error Update(ctx context.Context, user *model.User) error GetByID(ctx context.Context, id string) (*model.User, error) GetByEmail(ctx context.Context, email string) (*model.User, error) } func NewUserRepository(r *Repository) UserRepository { return &userRepository{ Repository: r, } } type userRepository struct { *Repository } func (r *userRepository) Create(ctx context.Context, user *model.User) error { if err := r.DB(ctx).Create(user).Error; err != nil { return err } return nil } func (r *userRepository) Update(ctx context.Context, user *model.User) error { if err := r.DB(ctx).Save(user).Error; err != nil { return err } return nil } func (r *userRepository) GetByID(ctx context.Context, userId string) (*model.User, error) { var user model.User if err := r.DB(ctx).Where("user_id = ?", userId).First(&user).Error; err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return nil, v1.ErrNotFound } return nil, err } return &user, nil } func (r *userRepository) GetByEmail(ctx context.Context, email string) (*model.User, error) { var user model.User if err := r.DB(ctx).Where("email = ?", email).First(&user).Error; err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return nil, nil } return nil, err } return &user, nil }