feat: 多班级版 v2.0 - Go后端重写 + 43轮代码审查

- 后端从 Python FastAPI 重写为 Go Gin(端口 56789)
- 多班级完全隔离
- 超级管理员独立登录
- 课代表作业管理、排行榜分项排行
- 角色加减分上下限可配置
- 家长改密功能(可开关)
- 周度/月度重置功能
- MySQL 5.7 兼容
- 43轮代码审查+全部修复
- Apache 2.0 许可证
This commit is contained in:
2026-06-22 10:06:10 +08:00
parent 4084afc53c
commit d6dec878bd
214 changed files with 12622 additions and 9725 deletions

View File

@@ -0,0 +1,100 @@
// ===========================================
// 多班级版班级管理系统 - 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"
)
// SystemSettingRepo 系统设置数据访问层
type SystemSettingRepo struct {
db *gorm.DB
}
// NewSystemSettingRepo 创建系统设置 Repository
func NewSystemSettingRepo(db *gorm.DB) *SystemSettingRepo {
return &SystemSettingRepo{db: db}
}
// GetByKey 根据键名获取系统设置
func (r *SystemSettingRepo) GetByKey(key string) (*model.SystemSetting, error) {
var setting model.SystemSetting
if err := r.db.Where("setting_key = ?", key).First(&setting).Error; err != nil {
return nil, err
}
return &setting, nil
}
// GetAll 获取所有系统设置
func (r *SystemSettingRepo) GetAll() ([]model.SystemSetting, error) {
var settings []model.SystemSetting
if err := r.db.Find(&settings).Error; err != nil {
return nil, err
}
return settings, nil
}
// GetByKeyMap 获取所有系统设置并转为 map
func (r *SystemSettingRepo) GetByKeyMap() (map[string]string, error) {
settings, err := r.GetAll()
if err != nil {
return nil, err
}
result := make(map[string]string, len(settings))
for _, s := range settings {
result[s.SettingKey] = s.SettingValue
}
return result, nil
}
// Save 保存系统设置upsert
func (r *SystemSettingRepo) Save(key, value string) error {
setting := model.SystemSetting{
SettingKey: key,
SettingValue: value,
}
return r.db.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "setting_key"}},
DoUpdates: clause.AssignmentColumns([]string{"setting_value"}),
}).Create(&setting).Error
}
// BatchSave 批量保存系统设置
func (r *SystemSettingRepo) BatchSave(settings map[string]string) error {
for key, value := range settings {
if err := r.Save(key, value); err != nil {
return err
}
}
return nil
}
// GetValue 根据键名获取设置值
func (r *SystemSettingRepo) GetValue(key string) (string, error) {
setting, err := r.GetByKey(key)
if err != nil {
return "", err
}
return setting.SettingValue, nil
}
// GetValueWithDefault 根据键名获取设置值,不存在则返回默认值
func (r *SystemSettingRepo) GetValueWithDefault(key, defaultValue string) string {
setting, err := r.GetByKey(key)
if err != nil {
return defaultValue
}
return setting.SettingValue
}