package repository import ( "dianshang/internal/model" "gorm.io/gorm" ) // AdminRepository 管理员仓库 type AdminRepository struct { db *gorm.DB } // NewAdminRepository 创建管理员仓库 func NewAdminRepository(db *gorm.DB) *AdminRepository { return &AdminRepository{db: db} } // Create 创建管理员 func (r *AdminRepository) Create(admin *model.AdminUser) error { return r.db.Create(admin).Error } // GetByID 根据ID获取管理员 func (r *AdminRepository) GetByID(id uint) (*model.AdminUser, error) { var admin model.AdminUser err := r.db.First(&admin, id).Error return &admin, err } // GetByIDWithRole 根据ID获取管理员(包含角色信息) func (r *AdminRepository) GetByIDWithRole(id uint) (*model.AdminUser, error) { var admin model.AdminUser err := r.db.Preload("Role").First(&admin, id).Error if err != nil { return nil, err } // 不返回密码 admin.Password = "" return &admin, nil } // GetByUsername 根据用户名获取管理员 func (r *AdminRepository) GetByUsername(username string) (*model.AdminUser, error) { var admin model.AdminUser err := r.db.Where("username = ?", username).First(&admin).Error return &admin, err } // GetList 获取管理员列表 func (r *AdminRepository) GetList(page, pageSize int, keyword string) ([]model.AdminUser, int64, error) { var admins []model.AdminUser var total int64 query := r.db.Model(&model.AdminUser{}).Preload("Role") // 关键词搜索 if keyword != "" { query = query.Where("username LIKE ? OR nickname LIKE ? OR email LIKE ?", "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%") } // 获取总数 if err := query.Count(&total).Error; err != nil { return nil, 0, err } // 分页查询 offset := (page - 1) * pageSize err := query.Offset(offset).Limit(pageSize).Order("created_at DESC").Find(&admins).Error // 清除密码字段 for i := range admins { admins[i].Password = "" } return admins, total, err } // Update 更新管理员 func (r *AdminRepository) Update(id uint, updates map[string]interface{}) error { return r.db.Model(&model.AdminUser{}).Where("id = ?", id).Updates(updates).Error } // Delete 删除管理员(软删除) func (r *AdminRepository) Delete(id uint) error { return r.db.Delete(&model.AdminUser{}, id).Error } // GetAdminCount 获取管理员总数 func (r *AdminRepository) GetAdminCount() (int64, error) { var count int64 err := r.db.Model(&model.AdminUser{}).Count(&count).Error return count, err } // GetActiveAdminCount 获取活跃管理员总数 func (r *AdminRepository) GetActiveAdminCount() (int64, error) { var count int64 err := r.db.Model(&model.AdminUser{}).Where("status = ?", 1).Count(&count).Error return count, err }