package repository import ( "yinli-api/internal/model" "yinli-api/pkg/database" "github.com/jinzhu/gorm" ) // UserRepository 用户仓库接口 type UserRepository interface { Create(user *model.User) error GetByID(id uint) (*model.User, error) GetByName(name string) (*model.User, error) Update(user *model.User) error Delete(id uint) error List(offset, limit int) ([]*model.User, int64, error) ExistsByName(name string) (bool, error) UpdateStatus(id uint, status int) error } // userRepository 用户仓库实现 type userRepository struct { db *gorm.DB } // NewUserRepository 创建用户仓库实例 func NewUserRepository() UserRepository { return &userRepository{ db: database.GetDB(), } } // Create 创建用户 func (r *userRepository) Create(user *model.User) error { return r.db.Create(user).Error } // GetByID 根据ID获取用户 func (r *userRepository) GetByID(id uint) (*model.User, error) { var user model.User err := r.db.Where("id = ?", id).First(&user).Error if err != nil { return nil, err } return &user, nil } // GetByName 根据用户名获取用户 func (r *userRepository) GetByName(name string) (*model.User, error) { var user model.User err := r.db.Where("name = ?", name).First(&user).Error if err != nil { return nil, err } return &user, nil } // Update 更新用户 func (r *userRepository) Update(user *model.User) error { return r.db.Save(user).Error } // Delete 删除用户 func (r *userRepository) Delete(id uint) error { return r.db.Where("id = ?", id).Delete(&model.User{}).Error } // List 获取用户列表 func (r *userRepository) List(offset, limit int) ([]*model.User, int64, error) { var users []*model.User var total int64 // 获取总数 if err := r.db.Model(&model.User{}).Count(&total).Error; err != nil { return nil, 0, err } // 获取分页数据 err := r.db.Offset(offset).Limit(limit).Find(&users).Error if err != nil { return nil, 0, err } return users, total, nil } // ExistsByName 检查用户名是否存在 func (r *userRepository) ExistsByName(name string) (bool, error) { var count int64 err := r.db.Model(&model.User{}).Where("name = ?", name).Count(&count).Error return count > 0, err } // GetActiveUsers 获取活跃用户 func (r *userRepository) GetActiveUsers() ([]*model.User, error) { var users []*model.User err := r.db.Where("status = ?", 1).Find(&users).Error return users, err } // UpdateStatus 更新用户状态 func (r *userRepository) UpdateStatus(id uint, status int) error { return r.db.Model(&model.User{}).Where("id = ?", id).Update("status", status).Error }