// gen2d backend 入口 package main import ( "fmt" "log/slog" "gen2d/internal/config" "gen2d/internal/db" "gen2d/internal/handler" "gen2d/internal/logger" "gen2d/internal/mildware" "gen2d/internal/model" "gen2d/internal/service" "github.com/gin-gonic/gin" ) func main() { cfg := config.Load() // 初始化日志 logger.Init(cfg.Log.Level, cfg.Log.Format) gin.SetMode(cfg.Server.Mode) // 初始化 SQLite 数据库 if err := db.Init(cfg.Database.DSN, &model.User{}, &model.Project{}, &model.ProjectStyleRecord{}, &model.Task{}); err != nil { slog.Error("db init failed", "error", err) return } // 初始化 AuthService,注入 JWT 配置 handler.InitAuthService(cfg.JWT.Secret, cfg.JWT.Expire) // 注入 LLM 和文生图配置到 service 层 service.InitLLMConfig(cfg.LLM) service.InitImageGenConfig(cfg.ImageGen) // 初始化七牛云存储服务 storageSvc := service.NewStorageService(cfg.Qiniu) handler.InitStorageService(storageSvc) // 初始化项目服务 service.InitProjectService(db.GetDB()) r := gin.New() r.Use(mildware.Logger()) r.Use(mildware.Recovery()) // API v1 路由组 — 公开接口 v1 := r.Group("/api/v1") { v1.GET("/health", handler.Health) // 健康检查 v1.POST("/prompt/optimize", handler.PromptOptimize) // 提示词优化 v1.GET("/assets/download", handler.DownloadAsset) // 素材下载 } // API v1 路由组 — 需认证 v1Auth := r.Group("/api/v1") v1Auth.Use(mildware.AuthMiddleware(cfg.JWT.Secret)) { // 工程管理 v1Auth.GET("/projects", handler.ListProjects) // 获取工程列表 v1Auth.POST("/projects", handler.CreateProject) // 创建工程 v1Auth.GET("/projects/:projectId", handler.GetProject) // 获取工程详情 v1Auth.PUT("/projects/:projectId", handler.UpdateProject) // 更新工程信息 v1Auth.DELETE("/projects/:projectId", handler.DeleteProject) // 删除工程 v1Auth.GET("/projects/:projectId/style", handler.GetStyle) // 获取工程风格 v1Auth.PUT("/projects/:projectId/style", handler.UpdateStyle) // 更新工程风格 v1Auth.GET("/projects/:projectId/tasks", handler.GetProjectTasks) // 获取工程任务列表 // 素材生成 v1Auth.POST("/generate", handler.Generate) // 素材生成管线 v1Auth.GET("/tasks/:taskId", handler.GetTask) // 查询任务 v1Auth.GET("/tasks/:taskId/assets", handler.GetAssets) // 查询任务素材 // 图片编辑 v1Auth.POST("/images/edit", handler.EditImage) // 图片编辑 } // Auth 路由组 auth := r.Group("/auth") { auth.POST("/register", handler.Register) // 用户注册 auth.POST("/login", handler.Login) // 用户登录 } addr := fmt.Sprintf(":%d", cfg.Server.Port) slog.Info("gen2d backend starting", "addr", addr, "mode", cfg.Server.Mode) if err := r.Run(addr); err != nil { slog.Error("server failed", "error", err) } }