Files
SharedClassManager/backend-go/pkg/database/mysql.go
canglan 124d7f645e feat: 多班级版班级管理系统 v2.0
技术栈:Go (Gin + GORM) + PHP + MySQL 5.7 + Redis

主要功能:
- 多班级完全隔离(class_id 贯穿全系统)
- 后端从 Python FastAPI 重写为 Go Gin(端口 56789)
- 超级管理员独立登录(env 配置路径,默认账密 admin/Admin123)
- 科任老师/课代表新角色
- 课代表作业管理页面
- 排行榜分项排行(操行分/考勤/作业)
- 角色加减分上下限由班主任配置
- 家长改密功能(可开关)
- 班级角色按需开关
- 宿舍号格式:南0-000
- 周度/月度重置功能
- MySQL 5.7 兼容
- Nginx 反向代理部署

开发者: Canglan
版权归属: Sea Network Technology Studio
许可证: Apache License 2.0
2026-06-22 10:21:52 +08:00

72 lines
1.6 KiB
Go

// ===========================================
// 多班级版班级管理系统 - Go 后端
//
// 开发者: Canglan
// 联系方式: admin@sea-studio.top
// 版权归属: Sea Network Technology Studio
// 许可证: Apache License 2.0
//
// 版权所有 © Sea Network Technology Studio
// ===========================================
package database
import (
"fmt"
"strings"
"time"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"hz-gitea.sea-studio.top/canglan/SharedClassManager/internal/config"
)
// DB 全局数据库实例
var DB *gorm.DB
// InitMySQL 初始化 MySQL 连接池
func InitMySQL(cfg *config.Config) (*gorm.DB, error) {
dsn := cfg.DSN()
// 根据 LogLevel 配置设置 GORM 日志级别
gormLogLevel := logger.Info
switch strings.ToLower(cfg.LogLevel) {
case "silent":
gormLogLevel = logger.Silent
case "error":
gormLogLevel = logger.Error
case "warn", "warning":
gormLogLevel = logger.Warn
default:
gormLogLevel = logger.Info
}
gormCfg := &gorm.Config{
Logger: logger.Default.LogMode(gormLogLevel),
}
db, err := gorm.Open(mysql.Open(dsn), gormCfg)
if err != nil {
return nil, fmt.Errorf("连接数据库失败: %w", err)
}
sqlDB, err := db.DB()
if err != nil {
return nil, fmt.Errorf("获取底层 sql.DB 失败: %w", err)
}
// 连接池配置
sqlDB.SetMaxOpenConns(cfg.DBMaxOpenConns)
sqlDB.SetMaxIdleConns(cfg.DBMaxIdleConns)
sqlDB.SetConnMaxLifetime(time.Duration(cfg.DBConnMaxLife) * time.Second)
// 测试连接
if err := sqlDB.Ping(); err != nil {
return nil, fmt.Errorf("数据库 Ping 失败: %w", err)
}
DB = db
return db, nil
}