Files

102 lines
2.7 KiB
Go
Raw Permalink Normal View History

2025-11-17 13:32:54 +08:00
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
}