sdk_generate/main.go

93 lines
2.3 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
"log"
"sdk-generator/internal/config"
"sdk-generator/internal/handler"
"sdk-generator/internal/push"
"sdk-generator/internal/service"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/cors"
"github.com/gofiber/fiber/v2/middleware/logger"
"github.com/gofiber/fiber/v2/middleware/recover"
"github.com/gofiber/template/html/v2"
)
func main() {
// 加载配置
cfg := config.Load()
// 创建服务
sdkService := service.NewSDKGeneratorService(cfg)
// 创建 Handler
sdkHandler := handler.NewSDKHandler(sdkService)
pageHandler := handler.NewPageHandler()
// 配置模板引擎
engine := html.New("./web/templates", ".html")
engine.Reload(true) // 开发时热重载
// 创建 Fiber 应用
app := fiber.New(fiber.Config{
AppName: "SDK Generator API",
Views: engine,
Prefork: false,
ServerHeader: "Fiber",
BodyLimit: 10 * 1024 * 1024, // 10MB
})
// 全局中间件
app.Use(recover.New())
app.Use(logger.New(logger.Config{
Format: "[${time}] ${status} - ${method} ${path} ${latency}\n",
}))
app.Use(cors.New(cors.Config{
AllowOrigins: "*",
AllowMethods: "GET,POST,PUT,DELETE,OPTIONS",
AllowHeaders: "Content-Type,Authorization",
}))
// 健康检查
app.Get("/health", func(c *fiber.Ctx) error {
return c.JSON(fiber.Map{
"status": "ok",
"app": "SDK Generator API",
})
})
// 静态文件
app.Static("/static", "./web/static")
// 页面路由
app.Get("/", pageHandler.Index)
// API 路由
api := app.Group("/api/v1")
// 上传文档生成 SDK
api.Post("/generate", sdkHandler.GenerateSDK)
// 查询生成任务状态
api.Get("/tasks/:task_id", sdkHandler.GetTaskStatus)
// 下载生成的 SDK
api.Get("/tasks/:task_id/download", sdkHandler.DownloadSDK)
// 列出所有任务
api.Get("/tasks", sdkHandler.ListTasks)
// 删除任务
api.Delete("/tasks/:task_id", sdkHandler.DeleteTask)
//初始化代码仓库客户端
_, err := push.NewGiteaClient(cfg.GiteaUrl, cfg.GiteaToken)
if err != nil {
log.Fatalf("Failed to initialize Gitea client: %v", err)
}
// 启动服务请访问以下链接获取接口“生成”的接口定义信息https://api.apifox.cn/temp-links/api/488609283?t=cb680e83-e054-41e5-a167-715db384e1d1
if err := app.Listen(":" + cfg.Port); err != nil {
log.Fatalf("Failed to start server: %v", err)
}
}