Files
zsp-project/backend/internal/repository/user_repository.go
2026-06-03 20:59:39 +08:00

67 lines
1.5 KiB
Go
Executable File

// internal/repository/user_repository.go
package repository
import (
"github.com/rovina/zsp-backend/internal/model"
"gorm.io/gorm"
)
type UserRepository interface {
Create(user *model.User) error
FindByID(id uint) (*model.User, error)
FindByEmail(email string) (*model.User, error)
FindByUsername(username string) (*model.User, error)
Update(user *model.User) error
Delete(id uint) error
}
type userRepository struct {
db *gorm.DB
}
func NewUserRepository(db *gorm.DB) UserRepository {
return &userRepository{db: db}
}
func (r *userRepository) Create(user *model.User) error {
return r.db.Create(user).Error
}
func (r *userRepository) FindByID(id uint) (*model.User, error) {
var user model.User
err := r.db.First(&user, id).Error
return &user, err
}
func (r *userRepository) FindByUsername(username string) (*model.User, error) {
var user model.User
err := r.db.Where("username = ?", username).First(&user).Error
if err != nil {
if err == gorm.ErrRecordNotFound {
return nil, nil
}
return nil, err
}
return &user, nil
}
func (r *userRepository) FindByEmail(email string) (*model.User, error) {
var user model.User
err := r.db.Where("email = ?", email).First(&user).Error
if err != nil {
if err == gorm.ErrRecordNotFound {
return nil, nil
}
return nil, err
}
return &user, nil
}
func (r *userRepository) Update(user *model.User) error {
return r.db.Save(user).Error
}
func (r *userRepository) Delete(id uint) error {
return r.db.Delete(&model.User{}, id).Error
}