技术栈: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
72 lines
1.6 KiB
Go
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
|
|
}
|