Files
ai_english/serve/main.go

84 lines
2.6 KiB
Go
Raw Normal View History

2025-11-17 13:39:05 +08:00
// main.go
package main
import (
"fmt"
"log"
"github.com/Nanqipro/YunQue-Tech-Projects/ai_english_learning/serve/api"
"github.com/Nanqipro/YunQue-Tech-Projects/ai_english_learning/serve/config"
"github.com/Nanqipro/YunQue-Tech-Projects/ai_english_learning/serve/internal/database"
"github.com/Nanqipro/YunQue-Tech-Projects/ai_english_learning/serve/internal/logger"
)
func main() {
// 加载配置
config.LoadConfig()
if config.GlobalConfig == nil {
log.Fatal("Failed to load configuration")
}
// 初始化日志系统
loggerConfig := logger.LogConfig{
Level: config.GlobalConfig.Log.Level,
Format: config.GlobalConfig.Log.Format,
Output: config.GlobalConfig.Log.Output,
FilePath: config.GlobalConfig.Log.FilePath,
MaxSize: config.GlobalConfig.Log.MaxSize,
MaxBackups: config.GlobalConfig.Log.MaxBackups,
MaxAge: config.GlobalConfig.Log.MaxAge,
Compress: config.GlobalConfig.Log.Compress,
}
logger.InitLogger(loggerConfig)
// 初始化数据库
database.InitDatabase()
defer database.CloseDatabase()
// 检查是否为生产环境
isProduction := config.GlobalConfig.App.Environment == "production"
// 生产环境下跳过数据库迁移和初始化操作
if !isProduction {
// 执行合并后的SQL以创建视图/触发器/扩展表(若尚未存在)
if err := database.ApplyMergedSchemaIfNeeded(database.GetDB()); err != nil {
log.Printf("Warning: Failed to apply merged schema: %v", err)
}
// 运行数据库迁移
if err := database.AutoMigrate(database.GetDB()); err != nil {
log.Fatalf("Failed to migrate database: %v", err)
}
// 创建索引
if err := database.CreateIndexes(database.GetDB()); err != nil {
log.Printf("Warning: Failed to create indexes: %v", err)
}
// 初始化种子数据
if err := database.SeedData(database.GetDB()); err != nil {
log.Printf("Warning: Failed to seed data: %v", err)
}
} else {
log.Println("Production environment detected, skipping database migration and initialization")
}
// 记录启动信息
logger.WithFields(map[string]interface{}{
"app_name": config.GlobalConfig.App.Name,
"app_version": config.GlobalConfig.App.Version,
"environment": config.GlobalConfig.App.Environment,
"port": config.GlobalConfig.Server.Port,
}).Info("Starting AI English Learning Server")
// 从 api 包获取配置好的路由引擎
router := api.SetupRouter()
// 启动服务
port := fmt.Sprintf(":%s", config.GlobalConfig.Server.Port)
logger.Infof("Server is running on port %s", config.GlobalConfig.Server.Port)
if err := router.Run(port); err != nil {
logger.Fatalf("Failed to start server: %v", err)
}
}