package main import ( "embed" "fmt" "log" "net/http" vfs "git.zzyxyz.com/zzy/zzyxyz_go_api/gen/vfs" "git.zzyxyz.com/zzy/zzyxyz_go_api/internal/handlers" vfsdriver "git.zzyxyz.com/zzy/zzyxyz_go_api/internal/handlers/vfs_driver" "git.zzyxyz.com/zzy/zzyxyz_go_api/internal/models" "github.com/gin-gonic/gin" ) //go:generate go tool oapi-codegen -config config/bookmark/client.yaml config/bookmark/bookmark.yaml //go:generate go tool oapi-codegen -config config/bookmark/server.yaml config/bookmark/bookmark.yaml //go:generate go tool oapi-codegen -config config/vfs/server.yaml config/vfs/vfs.yaml //go:generate go tool oapi-codegen -config config/vfs/server.yaml config/vfs/vfs.yaml //go:generate go tool oapi-codegen -config config/user_np/server.yaml config/user_np/user_np.yaml //go:embed config/* dist/* var staticFiles embed.FS func main() { gin.SetMode(gin.ReleaseMode) router := gin.Default() router.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "pong", }) }) api_router := router.Group("/api") { if vfsImpl, err := models.NewVfs("./data/vfs.sqlite3"); err != nil { log.Fatal("Failed to create vfs server:", err) } else if server, err := handlers.NewVfsHandler(*vfsImpl); err != nil { log.Fatal("Failed to create bookmarks server:", err) } else { vfs.RegisterHandlers(api_router, server) // 示例:在你的服务初始化代码中 bookmarkService, err := vfsdriver.NewVfsBookMarkService("http://localhost:8081/api") // 替换为实际的 bookmark 服务地址 if err != nil { log.Fatal("Failed to create bookmark service client:", err) } server.RegisterProxy(&handlers.ProxyEntry{Name: "bk", Proxy: bookmarkService}) } handlers.TodoHandler(api_router) } // FIXME 可能有更好的方式实现这个代码 // 提供嵌入的静态文件访问 - OpenAPI YAML 文件和 dist 目录 router.GET("/config/*filename", func(ctx *gin.Context) { // 直接修改请求路径实现映射 r := ctx.Request originalPath := r.URL.Path filename := ctx.Param("filename") filepath := fmt.Sprintf("/config/%s/%s.yaml", filename, filename) r.URL.Path = filepath fs := http.FileServer(http.FS(staticFiles)) fs.ServeHTTP(ctx.Writer, r) // 恢复原始路径 r.URL.Path = originalPath }) router.GET("/swagger/*filepath", func(ctx *gin.Context) { // 直接修改请求路径实现映射 r := ctx.Request originalPath := r.URL.Path // 将 /swagger/* 映射为 /dist/* r.URL.Path = "/dist" + ctx.Param("filepath") fs := http.FileServer(http.FS(staticFiles)) fs.ServeHTTP(ctx.Writer, r) // 恢复原始路径 r.URL.Path = originalPath }) var listener = "localhost:8080" log.Printf("Starting server at http://%s", listener) log.Printf("Swagger UI: http://%s/swagger/index.html", listener) log.Fatal(router.Run(listener)) }