feat(bookmark): 添加文件夹树结构导入导出接口

新增 `/bookmarks/v1/folder/serial` 接口,支持文件夹树结构的压缩导出与解压导入。
同时完善了相关响应结构体定义,如 ImportResponse 等。

refactor(bookmark): 重命名配置文件并调整字段命名

将 `config/api.yaml` 重命名为 `config/bookmark.yaml`,并统一将 parent_path_id 字段
更名为 parent_id。此外,更新 API 鉴权头名称为 X-BookMark-Token。

feat(bookmark): 实现文件夹挂载管理功能

新增以下三个接口用于管理文件夹挂载:
- GET `/bookmarks/v1/folder/{id}/mount` 获取挂载信息
- POST `/bookmarks/v1/folder/{id}/mount` 挂载文件夹
- DELETE `/bookmarks/v1/folder/{id}/mount` 取消挂载

新增相关结构体定义:MountResponse、MountInfo。

feat(vfs): 初始化虚拟文件系统 API 配置

新增 `config/vfs.yaml` 和 `config/vfs_cfg.yaml` 配置文件,定义 VFS 相关接口和代码生成规则。
接口包括文件/目录的创建、读取、更新和删除操作,并引入新的安全头 X-VFS-Token。

chore(config): 忽略 data 目录并更新生成路径

.gitignore 中新增忽略 data/ 目录。同时更新 bookmark 和 vfs 的代码生成输出路径分别为
`./gen/bookmarks/gen.go` 和 `./gen/vfs/gen.go`。

chore(deps): 引入 casbin、gopsutil 等依赖库

go.mod 中新增 casbin 权限控制、gopsutil 系统监控等相关依赖。
```
This commit is contained in:
zzy
2025-09-23 01:33:50 +08:00
parent 6e513dbeb8
commit 60d6628b0d
15 changed files with 696 additions and 79 deletions

20
main.go
View File

@ -5,15 +5,15 @@ import (
"log"
"net/http"
"git.zzyxyz.com/zzy/zzyxyz_go_api/gen/api"
bookmarks "git.zzyxyz.com/zzy/zzyxyz_go_api/gen/bookmarks"
"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/*
//go:generate go tool oapi-codegen -config config/bookmark_cfg.yaml config/bookmark.yaml
//go:generate go tool oapi-codegen -config config/vfs_cfg.yaml config/vfs.yaml
//go:embed config/* dist/*
var staticFiles embed.FS
func main() {
@ -30,10 +30,12 @@ func main() {
{
// 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 {
if server, err := handlers.NewBookMarks("./data/bookmark.sqlite3"); err != nil {
log.Fatal("Failed to create bookmarks server:", err)
} else if permission, err := handlers.NewBookMarkPermission(); err != nil || permission == nil {
log.Fatal("Failed to create bookmarks permission:", err)
} else {
api.RegisterHandlers(api_router, server)
bookmarks.RegisterHandlersWithOptions(api_router, server, *permission)
}
handlers.TodoHandler(api_router)
@ -41,9 +43,9 @@ func main() {
// 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("/config/*filepath", func(ctx *gin.Context) {
fs := http.FileServer(http.FS(staticFiles))
fs.ServeHTTP(ctx.Writer, ctx.Request)
})
router.GET("/swagger/*filepath", func(ctx *gin.Context) {
// 直接修改请求路径实现映射