init
This commit is contained in:
83
serve/main.go
Normal file
83
serve/main.go
Normal file
@@ -0,0 +1,83 @@
|
||||
// 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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user