首次提交:初始化项目代码
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
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"})
|
||||
}
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user