diff --git a/internal/repository/user.go b/internal/repository/user.go new file mode 100644 index 0000000..35f035a --- /dev/null +++ b/internal/repository/user.go @@ -0,0 +1,76 @@ +package repository + +import ( + "gotest/internal/model" + + "gorm.io/gorm" +) + +// UserRepository 用户数据访问层 +type UserRepository struct { + db *gorm.DB +} + +// NewUserRepository 创建用户仓库实例 +func NewUserRepository(db *gorm.DB) *UserRepository { + return &UserRepository{db: db} +} + +// Create 创建用户 +func (r *UserRepository) Create(user *model.User) error { + return r.db.Create(user).Error +} + +// FindByUsername 根据用户名查询用户 +func (r *UserRepository) FindByUsername(username string) (*model.User, error) { + var user model.User + if err := r.db.Where("username = ?", username).First(&user).Error; err != nil { + return nil, err + } + return &user, nil +} + +// FindByID 根据 ID 查询用户 +func (r *UserRepository) FindByID(id uint) (*model.User, error) { + var user model.User + if err := r.db.First(&user, id).Error; 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.Delete(&model.User{}, id).Error +} + +// List 分页查询用户列表 +func (r *UserRepository) List(page, pageSize 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 + } + + offset := (page - 1) * pageSize + if err := r.db.Order("id DESC").Offset(offset).Limit(pageSize).Find(&users).Error; err != nil { + return nil, 0, err + } + + return users, total, nil +} + +// Count 统计用户总数 +func (r *UserRepository) Count() (int64, error) { + var count int64 + if err := r.db.Model(&model.User{}).Count(&count).Error; err != nil { + return 0, err + } + return count, nil +}