Initial commit
This commit is contained in:
102
server/internal/repository/admin.go
Normal file
102
server/internal/repository/admin.go
Normal file
@@ -0,0 +1,102 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user