Files
ai_dianshang/server/internal/repository/admin.go
2025-11-17 13:32:54 +08:00

102 lines
2.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}