2025-12-19 22:36:48 +08:00
|
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"ai_xhs/config"
|
|
|
|
|
|
"ai_xhs/database"
|
|
|
|
|
|
"ai_xhs/middleware"
|
|
|
|
|
|
"ai_xhs/router"
|
|
|
|
|
|
"ai_xhs/service"
|
2026-01-06 19:36:42 +08:00
|
|
|
|
// "ai_xhs/tools" // 临时注释,避免包冲突
|
|
|
|
|
|
"ai_xhs/utils"
|
2025-12-19 22:36:48 +08:00
|
|
|
|
"flag"
|
|
|
|
|
|
"fmt"
|
|
|
|
|
|
"log"
|
|
|
|
|
|
|
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
|
|
// 解析命令行参数
|
|
|
|
|
|
env := flag.String("env", "dev", "运行环境: dev, prod")
|
|
|
|
|
|
flag.Parse()
|
|
|
|
|
|
|
|
|
|
|
|
// 加载配置
|
|
|
|
|
|
if err := config.LoadConfig(*env); err != nil {
|
|
|
|
|
|
log.Fatalf("配置加载失败: %v", err)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 初始化数据库
|
|
|
|
|
|
if err := database.InitDB(); err != nil {
|
|
|
|
|
|
log.Fatalf("数据库初始化失败: %v", err)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-06 19:36:42 +08:00
|
|
|
|
// 初始化Redis
|
|
|
|
|
|
if err := database.InitRedis(); err != nil {
|
|
|
|
|
|
log.Fatalf("Redis初始化失败: %v", err)
|
|
|
|
|
|
}
|
|
|
|
|
|
defer database.CloseRedis()
|
|
|
|
|
|
|
|
|
|
|
|
// 初始化OSS
|
|
|
|
|
|
log.Printf("OSS配置: Endpoint=%s, AccessKeyID=%s..., AccessKeySecret=%s..., BucketName=%s",
|
|
|
|
|
|
config.AppConfig.Upload.OSS.Endpoint,
|
|
|
|
|
|
config.AppConfig.Upload.OSS.AccessKeyID[:8],
|
|
|
|
|
|
config.AppConfig.Upload.OSS.AccessKeySecret[:8],
|
|
|
|
|
|
config.AppConfig.Upload.OSS.BucketName)
|
|
|
|
|
|
|
|
|
|
|
|
if err := utils.InitOSS(); err != nil {
|
|
|
|
|
|
log.Fatalf("OSS初始化失败: %v", err)
|
|
|
|
|
|
}
|
|
|
|
|
|
log.Println("OSS客户端初始化成功")
|
|
|
|
|
|
|
|
|
|
|
|
// 初始化短信服务
|
|
|
|
|
|
smsService := service.GetSmsService()
|
|
|
|
|
|
smsService.StartCleanupTask()
|
|
|
|
|
|
log.Println("短信服务已初始化")
|
|
|
|
|
|
|
|
|
|
|
|
// 启动服务监控(宕机时发送短信通知)
|
|
|
|
|
|
// 临时注释:避免tools包冲突导致编译失败
|
|
|
|
|
|
// monitor := tools.GetServiceMonitor("15707023967", "AI小红书服务")
|
|
|
|
|
|
// monitor.StartMonitoring()
|
|
|
|
|
|
// log.Println("服务监控已启动")
|
|
|
|
|
|
|
2025-12-19 22:36:48 +08:00
|
|
|
|
// 自动迁移数据库表
|
|
|
|
|
|
//if err := database.AutoMigrate(); err != nil {
|
|
|
|
|
|
// log.Fatalf("数据库迁移失败: %v", err)
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
// 初始化定时任务
|
|
|
|
|
|
if config.AppConfig.Scheduler.Enabled {
|
|
|
|
|
|
scheduler := service.NewSchedulerService(
|
|
|
|
|
|
config.AppConfig.Scheduler.MaxConcurrent,
|
|
|
|
|
|
config.AppConfig.Scheduler.PublishTimeout,
|
|
|
|
|
|
)
|
|
|
|
|
|
if err := scheduler.Start(config.AppConfig.Scheduler.PublishCron); err != nil {
|
|
|
|
|
|
log.Fatalf("定时任务启动失败: %v", err)
|
|
|
|
|
|
}
|
|
|
|
|
|
log.Println("定时任务服务已启动")
|
|
|
|
|
|
defer scheduler.Stop()
|
|
|
|
|
|
} else {
|
|
|
|
|
|
log.Println("定时任务服务已禁用")
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 设置运行模式
|
|
|
|
|
|
gin.SetMode(config.AppConfig.Server.Mode)
|
|
|
|
|
|
|
|
|
|
|
|
// 创建路由
|
|
|
|
|
|
r := gin.New()
|
2026-01-06 19:36:42 +08:00
|
|
|
|
|
2025-12-19 22:36:48 +08:00
|
|
|
|
// 添加中间件
|
2026-01-06 19:36:42 +08:00
|
|
|
|
r.Use(gin.Recovery()) // 崩溃恢复
|
2025-12-19 22:36:48 +08:00
|
|
|
|
r.Use(middleware.RequestLogger()) // API请求日志
|
|
|
|
|
|
|
|
|
|
|
|
// 设置路由
|
|
|
|
|
|
router.SetupRouter(r)
|
|
|
|
|
|
|
|
|
|
|
|
// 启动服务
|
|
|
|
|
|
addr := fmt.Sprintf(":%d", config.AppConfig.Server.Port)
|
|
|
|
|
|
log.Printf("服务启动在端口 %s, 环境: %s", addr, *env)
|
|
|
|
|
|
if err := r.Run(addr); err != nil {
|
|
|
|
|
|
log.Fatalf("服务启动失败: %v", err)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|