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
|
||
} |