| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- package main
- import (
- "context"
- "log/slog"
- "os"
- "github.com/gin-gonic/gin"
- "github.com/kairo/haven/internal/config"
- "github.com/kairo/haven/internal/db"
- )
- // main 是后端入口。
- //
- // 配置全部来自环境变量,见 docs/architecture.md 第四节;
- // 本期只完成启动骨架:读取配置、初始化日志、注册健康检查。
- // 数据库连接、鉴权中间件与各领域路由按 TODO.md 后续条目接入。
- func main() {
- if err := run(); err != nil {
- slog.Error("服务启动失败", "err", err)
- os.Exit(1)
- }
- }
- func run() error {
- cfg, err := config.Load()
- if err != nil {
- return err
- }
- logger := newLogger(cfg.LogLevel)
- slog.SetDefault(logger)
- conn, err := db.Open(context.Background(), cfg.DBDSN)
- if err != nil {
- return err
- }
- defer conn.Close()
- logger.Info("数据库连接就绪")
- gin.SetMode(gin.ReleaseMode)
- r := gin.New()
- r.Use(gin.Recovery())
- r.GET("/api/health", func(c *gin.Context) {
- c.JSON(200, gin.H{"status": "ok"})
- })
- logger.Info("后端启动", "listen_addr", cfg.ListenAddr)
- return r.Run(cfg.ListenAddr)
- }
|