102 lines
2.7 KiB
Go
102 lines
2.7 KiB
Go
|
|
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
|
|||
|
|
}
|