Files
zzyxyz_go_api/main.go
zzy 6e513dbeb8 fix(bookmark): 更新书签模型字段为指针类型以支持可选字段
将 Bookmark 模型中的 Link、Detail 和 Description 字段修改为指针类型,
使其在数据库中可以为 NULL,并更新了对应的请求和响应处理逻辑。
同时修复根目录 ParentPathID 的初始化值为 -1。
此外,测试用例中暂时注释掉时间更新的断言并添加 FIXME 注释。
主程序监听地址从 127.0.0.1 改为 localhost。
2025-09-21 20:59:51 +08:00

67 lines
1.7 KiB
Go

package main
import (
"embed"
"log"
"net/http"
"git.zzyxyz.com/zzy/zzyxyz_go_api/gen/api"
"git.zzyxyz.com/zzy/zzyxyz_go_api/internal/handlers"
"github.com/gin-gonic/gin"
)
//go:generate go tool oapi-codegen -config config/cfg.yaml config/api.yaml
//go:embed config/api.yaml 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")
{
// create a type that satisfies the `api.ServerInterface`,
// which contains an implementation of every operation from the generated code
if server, err := handlers.NewBookMarks("user.sqlite3"); err != nil {
log.Fatal("Failed to create bookmarks server:", err)
} else {
api.RegisterHandlers(api_router, server)
}
handlers.TodoHandler(api_router)
}
// FIXME 可能有更好的方式实现这个代码
// 提供嵌入的静态文件访问 - OpenAPI YAML 文件和 dist 目录
router.GET("/swagger.yaml", func(c *gin.Context) {
file, _ := staticFiles.ReadFile("config/api.yaml")
c.Data(http.StatusOK, "application/x-yaml", file)
})
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))
}