Files
cloudnest/cmd/auth-service/main.go
T

66 lines
1.9 KiB
Go

package main
import (
"net/http"
"cloudnest/internal/bootstrap"
"cloudnest/internal/config"
"cloudnest/internal/di"
"cloudnest/internal/pkg/logger"
"github.com/gin-gonic/gin"
)
func main() {
// Step 1: Initialize logger FIRST to prevent nil pointer panics
// 第一步:先初始化日志记录器以防止空指针 panic
logger.Init("info")
// Step 2: Load configuration
// 第二步:加载配置
cfg := config.Load()
// Step 3: Re-initialize logger with the configured log level
// 第三步:使用配置的日志级别重新初始化日志记录器
logger.Init(cfg.App.LogLevel)
// Step 4: Initialize services
// 第四步:初始化服务
c := di.New()
if err := c.InitializeServices(); err != nil {
logger.Fatal("failed to initialize services", "error", err)
}
// Step 5: Build the HTTP engine (auth service only registers auth routes)
// 第五步:构建 HTTP 引擎(认证服务只注册认证路由)
engine, err := c.BuildAuthEngine()
if err != nil {
logger.Fatal("failed to build engine", "error", err)
}
setupStaticFiles(engine)
// Step 6: Create server with lifecycle management
// 第六步:创建带生命周期管理的服务器
srv := bootstrap.NewServer(cfg, engine)
if err := srv.Run(); err != nil {
if err == bootstrap.ErrReloadRequested {
logger.Info("exiting for reload, supervisor should restart")
} else {
logger.Error("server exited with error", "error", err)
}
}
}
func setupStaticFiles(engine *gin.Engine) {
engine.GET("/", func(c *gin.Context) { serveHTML(c, "web/index.html") })
engine.GET("/login", func(c *gin.Context) { serveHTML(c, "web/login.html") })
engine.GET("/register", func(c *gin.Context) { serveHTML(c, "web/register.html") })
engine.NoRoute(func(c *gin.Context) {
if c.Request.Method == http.MethodGet {
serveHTML(c, "web/index.html")
} else {
c.JSON(http.StatusNotFound, gin.H{"code": 404, "message": "not found"})
}
})
}