// =========================================== // 多班级版班级管理系统 - Go 后端 // // 开发者: Canglan // 联系方式: admin@sea-studio.top // 版权归属: Sea Network Technology Studio // 许可证: Apache License 2.0 // // 版权所有 © Sea Network Technology Studio // =========================================== package repository import ( "gorm.io/gorm" "gorm.io/gorm/clause" "hz-gitea.sea-studio.top/canglan/SharedClassManager/internal/model" ) // SuperAdminRepo 超级管理员数据访问层 type SuperAdminRepo struct { db *gorm.DB } // NewSuperAdminRepo 创建超级管理员 Repository func NewSuperAdminRepo(db *gorm.DB) *SuperAdminRepo { return &SuperAdminRepo{db: db} } // GetByUsername 根据用户名获取超级管理员 func (r *SuperAdminRepo) GetByUsername(username string) (*model.SuperAdmin, error) { var admin model.SuperAdmin if err := r.db.Where("username = ? AND status = 1", username).First(&admin).Error; err != nil { return nil, err } return &admin, nil } // GetByID 根据ID获取超级管理员 func (r *SuperAdminRepo) GetByID(id int) (*model.SuperAdmin, error) { var admin model.SuperAdmin if err := r.db.Where("id = ?", id).First(&admin).Error; err != nil { return nil, err } return &admin, nil } // Create 创建超级管理员 func (r *SuperAdminRepo) Create(admin *model.SuperAdmin) (int, error) { if err := r.db.Create(admin).Error; err != nil { return 0, err } return admin.ID, nil } // UpdatePassword 更新超级管理员密码 func (r *SuperAdminRepo) UpdatePassword(id int, passwordHash string) error { return r.db.Model(&model.SuperAdmin{}). Where("id = ?", id). Update("password_hash", passwordHash).Error } // UpdatePasswordWithSalt 更新超级管理员密码和盐值,并清除强制改密标记 func (r *SuperAdminRepo) UpdatePasswordWithSalt(id int, passwordHash, salt string) error { return r.db.Model(&model.SuperAdmin{}). Where("id = ?", id). Updates(map[string]interface{}{ "password_hash": passwordHash, "salt": salt, "need_change_password": 0, }).Error } // CheckUsernameExists 检查用户名是否存在 func (r *SuperAdminRepo) CheckUsernameExists(username string) (bool, error) { var count int64 if err := r.db.Model(&model.SuperAdmin{}).Where("username = ?", username).Count(&count).Error; err != nil { return false, err } return count > 0, nil } // List 获取所有超级管理员 func (r *SuperAdminRepo) List() ([]model.SuperAdmin, error) { var admins []model.SuperAdmin if err := r.db.Order("id").Find(&admins).Error; err != nil { return nil, err } return admins, nil } // UpdateStatus 更新超级管理员状态 func (r *SuperAdminRepo) UpdateStatus(id int, status int8) error { return r.db.Model(&model.SuperAdmin{}). Where("id = ?", id). Update("status", status).Error } // EnsureDefaultAdmin 确保默认超级管理员存在(使用 INSERT IGNORE 避免并发竞态) func (r *SuperAdminRepo) EnsureDefaultAdmin(username, passwordHash, salt, realName string) error { admin := model.SuperAdmin{ Username: username, PasswordHash: passwordHash, Salt: salt, RealName: realName, Status: 1, } return r.db.Clauses(clause.OnConflict{DoNothing: true}).Create(&admin).Error }