mirror of
https://github.com/go-nunu/nunu-layout-advanced.git
synced 2025-09-27 04:45:52 +08:00
66 lines
1.7 KiB
Go
66 lines
1.7 KiB
Go
package repository
|
|
|
|
import (
|
|
"context"
|
|
"github.com/go-nunu/nunu-layout-advanced/internal/model"
|
|
"github.com/go-nunu/nunu-layout-advanced/internal/pkg/response"
|
|
"github.com/pkg/errors"
|
|
"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)
|
|
GetByUsername(ctx context.Context, username 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.Create(user).Error; err != nil {
|
|
return errors.Wrap(err, "failed to create user")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (r *userRepository) Update(ctx context.Context, user *model.User) error {
|
|
if err := r.db.Save(user).Error; err != nil {
|
|
return errors.Wrap(err, "failed to update user")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (r *userRepository) GetByID(ctx context.Context, userId string) (*model.User, error) {
|
|
var user model.User
|
|
if err := r.db.Where("user_id = ?", userId).First(&user).Error; err != nil {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return nil, response.ErrNotFound
|
|
}
|
|
return nil, errors.Wrap(err, "failed to get user by ID")
|
|
}
|
|
|
|
return &user, nil
|
|
}
|
|
|
|
func (r *userRepository) GetByUsername(ctx context.Context, username string) (*model.User, error) {
|
|
var user model.User
|
|
if err := r.db.Where("username = ?", username).First(&user).Error; err != nil {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return nil, nil
|
|
}
|
|
return nil, errors.Wrap(err, "failed to get user by username")
|
|
}
|
|
|
|
return &user, nil
|
|
}
|