feat: 更新SproutGate前后端代码

This commit is contained in:
2026-04-01 22:04:01 +08:00
parent 90590c7cb0
commit 650e1c7707
49 changed files with 3609 additions and 768 deletions

View File

@@ -0,0 +1,84 @@
package database
import (
"fmt"
"log"
"os"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
// DBConfig holds MySQL connection parameters.
type DBConfig struct {
Host string
Port string
User string
Password string
DBName string
}
func (c DBConfig) DSN() string {
return fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
c.User, c.Password, c.Host, c.Port, c.DBName)
}
func devConfig() DBConfig {
return DBConfig{
Host: "10.1.1.100",
Port: "3306",
User: "sproutgate-test",
Password: "sproutgate-test",
DBName: "sproutgate-test",
}
}
func prodConfig() DBConfig {
return DBConfig{
Host: "192.168.1.100",
Port: "3306",
User: "sproutgate",
Password: "sproutgate",
DBName: "sproutgate",
}
}
// Open 根据环境变量打开数据库连接。
// 优先级DB_DSN > APP_ENV(production/prod -> 生产库) > 默认开发库
func Open() (*gorm.DB, error) {
dsn := os.Getenv("DB_DSN")
if dsn == "" {
env := os.Getenv("APP_ENV")
if env == "production" || env == "prod" {
dsn = prodConfig().DSN()
log.Println("[database] 使用生产数据库 192.168.1.100:3306/sproutgate")
} else {
dsn = devConfig().DSN()
log.Println("[database] 使用开发数据库 10.1.1.100:3306/sproutgate-test")
}
} else {
log.Println("[database] 使用自定义 DB_DSN")
}
logLevel := logger.Info
if os.Getenv("GIN_MODE") == "release" {
logLevel = logger.Warn
}
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: logger.Default.LogMode(logLevel),
})
if err != nil {
return nil, fmt.Errorf("连接数据库失败: %w", err)
}
sqlDB, err := db.DB()
if err != nil {
return nil, err
}
sqlDB.SetMaxOpenConns(25)
sqlDB.SetMaxIdleConns(5)
return db, nil
}