package main import ( "context" "flag" "fmt" "net/http" "os" "os/signal" "syscall" "time" "gitea.com/bitwsd/core/common/cors" "gitea.com/bitwsd/core/common/log" "gitea.com/bitwsd/core/common/middleware" "gitea.com/bitwsd/document_ai/api" "gitea.com/bitwsd/document_ai/config" "gitea.com/bitwsd/document_ai/internal/storage/cache" "gitea.com/bitwsd/document_ai/internal/storage/dao" "gitea.com/bitwsd/document_ai/pkg/common" "gitea.com/bitwsd/document_ai/pkg/sms" "github.com/gin-gonic/gin" ) func main() { // 加载配置 env := "dev" flag.StringVar(&env, "env", "dev", "environment (dev/prod)") flag.Parse() configPath := fmt.Sprintf("./config/config_%s.yaml", env) if err := config.Init(configPath); err != nil { panic(err) } // 初始化日志 if err := log.Setup(config.GlobalConfig.Log); err != nil { panic(err) } // 初始化数据库 dao.InitDB(config.GlobalConfig.Database) cache.InitRedisClient(config.GlobalConfig.Redis) sms.InitSmsClient() // 初始化Redis // cache.InitRedis(config.GlobalConfig.Redis.Addr) // 初始化OSS客户端 // if err := oss.InitOSS(config.GlobalConfig.OSS); err != nil { // logger.Fatal("Failed to init OSS client", logger.Fields{"error": err}) // } // 设置gin模式 gin.SetMode(config.GlobalConfig.Server.Mode) // 设置路由 r := gin.New() // 使用中间件 r.Use(gin.Recovery(), middleware.RequestID(), middleware.AccessLog(), cors.Cors(cors.DefaultConfig()), common.MiddlewareContext) router := r.Group("doc_ai") api.SetupRouter(router) // 启动服务器 addr := fmt.Sprintf(":%d", config.GlobalConfig.Server.Port) srv := &http.Server{Addr: addr, Handler: r} go func() { if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { panic(err) } }() quit := make(chan os.Signal, 1) signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) <-quit // 优雅地关闭服务器 if err := srv.Shutdown(context.Background()); err != nil { panic(err) } time.Sleep(time.Second * 3) dao.CloseDB() }