package main import ( "fmt" "net/http" "os" "github.com/joho/godotenv" "go.uber.org/zap" "go.uber.org/zap/zapcore" "github.com/topfans/laserCompositor/config" "github.com/topfans/laserCompositor/handler" ) func main() { // 初始化日志 logCfg := zap.NewDevelopmentConfig() logCfg.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder logger, err := logCfg.Build() if err != nil { panic(fmt.Sprintf("failed to init logger: %v", err)) } defer logger.Sync() logger.Info("Starting laser-compositor...") // 加载 backend/.env(与 gateway 一致) _ = godotenv.Load("../../.env", ".env") // 加载配置 cfg := config.Load() // 创建 handler composeHandler := handler.NewComposeHandler(cfg, logger) // 注册路由 mux := http.NewServeMux() mux.HandleFunc("/compose", composeHandler.ComposeSingle) mux.HandleFunc("/compose/batch", composeHandler.ComposeBatch) mux.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") w.Write([]byte(`{"status":"ok","service":"laser-compositor"}`)) }) addr := fmt.Sprintf(":%s", cfg.Port) logger.Info("Listening", zap.String("addr", addr)) if err := http.ListenAndServe(addr, mux); err != nil { logger.Fatal("Server failed", zap.Error(err)) os.Exit(1) } }