2026-05-23 12:19:33 +08:00
|
|
|
// gen2d backend 入口
|
2026-05-23 12:16:34 +08:00
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
2026-05-25 14:31:04 +08:00
|
|
|
"log/slog"
|
2026-05-23 12:16:34 +08:00
|
|
|
|
|
|
|
|
"gen2d/internal/config"
|
2026-05-24 13:53:03 +08:00
|
|
|
"gen2d/internal/db"
|
2026-05-23 12:16:34 +08:00
|
|
|
"gen2d/internal/handler"
|
2026-05-25 14:31:04 +08:00
|
|
|
"gen2d/internal/logger"
|
2026-05-24 22:47:43 +08:00
|
|
|
"gen2d/internal/mildware"
|
2026-05-24 13:53:03 +08:00
|
|
|
"gen2d/internal/model"
|
2026-05-24 20:45:18 +08:00
|
|
|
"gen2d/internal/service"
|
2026-05-23 12:16:34 +08:00
|
|
|
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
|
cfg := config.Load()
|
|
|
|
|
|
2026-05-25 14:31:04 +08:00
|
|
|
// 初始化日志
|
|
|
|
|
logger.Init(cfg.Log.Level, cfg.Log.Format)
|
|
|
|
|
|
2026-05-24 20:45:18 +08:00
|
|
|
gin.SetMode(cfg.Server.Mode)
|
2026-05-23 12:16:34 +08:00
|
|
|
|
2026-05-24 13:53:03 +08:00
|
|
|
// 初始化 SQLite 数据库
|
2026-05-25 17:54:18 +08:00
|
|
|
if err := db.Init(cfg.Database.DSN, &model.User{}, &model.Project{}, &model.ProjectStyleRecord{}, &model.Task{}, &model.Asset{}); err != nil {
|
2026-05-25 14:31:04 +08:00
|
|
|
slog.Error("db init failed", "error", err)
|
|
|
|
|
return
|
2026-05-24 13:53:03 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 初始化 AuthService,注入 JWT 配置
|
2026-05-24 20:45:18 +08:00
|
|
|
handler.InitAuthService(cfg.JWT.Secret, cfg.JWT.Expire)
|
|
|
|
|
|
|
|
|
|
// 注入 LLM 和文生图配置到 service 层
|
|
|
|
|
service.InitLLMConfig(cfg.LLM)
|
|
|
|
|
service.InitImageGenConfig(cfg.ImageGen)
|
2026-05-24 13:53:03 +08:00
|
|
|
|
2026-05-25 12:57:13 +08:00
|
|
|
// 初始化七牛云存储服务
|
|
|
|
|
storageSvc := service.NewStorageService(cfg.Qiniu)
|
|
|
|
|
handler.InitStorageService(storageSvc)
|
|
|
|
|
|
2026-05-25 16:39:35 +08:00
|
|
|
// 初始化项目服务
|
|
|
|
|
service.InitProjectService(db.GetDB())
|
|
|
|
|
|
2026-05-23 12:16:34 +08:00
|
|
|
r := gin.New()
|
2026-05-25 14:31:04 +08:00
|
|
|
r.Use(mildware.Logger())
|
|
|
|
|
r.Use(mildware.Recovery())
|
2026-05-23 12:16:34 +08:00
|
|
|
|
2026-05-24 22:47:43 +08:00
|
|
|
// API v1 路由组 — 公开接口
|
2026-05-24 13:53:03 +08:00
|
|
|
v1 := r.Group("/api/v1")
|
|
|
|
|
{
|
2026-05-25 14:31:04 +08:00
|
|
|
v1.GET("/health", handler.Health) // 健康检查
|
|
|
|
|
v1.POST("/prompt/optimize", handler.PromptOptimize) // 提示词优化
|
|
|
|
|
v1.GET("/assets/download", handler.DownloadAsset) // 素材下载
|
2026-05-24 13:53:03 +08:00
|
|
|
}
|
|
|
|
|
|
2026-05-24 22:47:43 +08:00
|
|
|
// API v1 路由组 — 需认证
|
|
|
|
|
v1Auth := r.Group("/api/v1")
|
|
|
|
|
v1Auth.Use(mildware.AuthMiddleware(cfg.JWT.Secret))
|
|
|
|
|
{
|
2026-05-25 16:39:35 +08:00
|
|
|
// 工程管理
|
|
|
|
|
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) // 获取工程任务列表
|
|
|
|
|
// 素材生成
|
2026-05-25 14:31:04 +08:00
|
|
|
v1Auth.POST("/generate", handler.Generate) // 素材生成管线
|
|
|
|
|
v1Auth.GET("/tasks/:taskId", handler.GetTask) // 查询任务
|
|
|
|
|
v1Auth.GET("/tasks/:taskId/assets", handler.GetAssets) // 查询任务素材
|
2026-05-25 16:39:35 +08:00
|
|
|
// 图片编辑
|
2026-05-25 14:31:04 +08:00
|
|
|
v1Auth.POST("/images/edit", handler.EditImage) // 图片编辑
|
2026-05-24 22:47:43 +08:00
|
|
|
}
|
|
|
|
|
|
2026-05-24 13:53:03 +08:00
|
|
|
// Auth 路由组
|
|
|
|
|
auth := r.Group("/auth")
|
|
|
|
|
{
|
|
|
|
|
auth.POST("/register", handler.Register) // 用户注册
|
|
|
|
|
auth.POST("/login", handler.Login) // 用户登录
|
|
|
|
|
}
|
2026-05-23 12:16:34 +08:00
|
|
|
|
2026-05-24 20:45:18 +08:00
|
|
|
addr := fmt.Sprintf(":%d", cfg.Server.Port)
|
2026-05-25 14:31:04 +08:00
|
|
|
slog.Info("gen2d backend starting", "addr", addr, "mode", cfg.Server.Mode)
|
2026-05-23 12:16:34 +08:00
|
|
|
if err := r.Run(addr); err != nil {
|
2026-05-25 14:31:04 +08:00
|
|
|
slog.Error("server failed", "error", err)
|
2026-05-23 12:16:34 +08:00
|
|
|
}
|
|
|
|
|
}
|