// internal/handlers/vfs_driver/vfs_bookmark.go package vfsdriver import ( "context" "encoding/json" "fmt" "net/http" api "git.zzyxyz.com/zzy/zzyxyz_go_api/gen/bookmarks_client" "git.zzyxyz.com/zzy/zzyxyz_go_api/internal/vfs/models" vfs_service "git.zzyxyz.com/zzy/zzyxyz_go_api/internal/vfs/services" ) type VfsBookMarkService struct { client *api.ClientWithResponses token string } func NewVfsBookMarkService(serverURL string) (*vfs_service.ProxyEntry, error) { client, err := api.NewClientWithResponses(serverURL) if err != nil { return nil, err } ret := vfs_service.ProxyEntry{ Name: "bookmark", MatchExt: "bk", Proxy: &VfsBookMarkService{ client: client, token: "random_token", }, } return &ret, nil } // Create implements ServiceProxy. func (v *VfsBookMarkService) Create(servicePath string, node *models.VfsNode, data []byte) ([]byte, error) { ctx := context.Background() // 解析传入的数据为 BookmarkRequest var req api.BookmarkRequest if err := json.Unmarshal(data, &req); err != nil { return nil, err } // 调用 bookmark 服务创建书签 resp, err := v.client.CreateBookmarkWithResponse(ctx, int64(node.ID), req, func(ctx context.Context, req *http.Request) error { req.Header.Set("X-BookMark-Token", v.token) return nil }) if err != nil { return nil, err } // 处理响应 if resp.JSON201 != nil { data, err := json.Marshal(resp.JSON201) if err != nil { return nil, fmt.Errorf("marshal response error: %w", err) } return data, nil } // 处理错误情况 if resp.JSON400 != nil { return nil, fmt.Errorf("bad request: %s", resp.JSON400.Message) } if resp.JSON500 != nil { return nil, fmt.Errorf("server error: %s", resp.JSON500.Message) } return nil, fmt.Errorf("unknown error: %s %s", resp.HTTPResponse.Status, resp.Body) } // Delete implements ServiceProxy. func (v *VfsBookMarkService) Delete(servicePath string, node *models.VfsNode) error { ctx := context.Background() // 调用 bookmark 服务删除书签 resp, err := v.client.DeleteBookmarkWithResponse(ctx, int64(node.ID), func(ctx context.Context, req *http.Request) error { req.Header.Set("X-BookMark-Token", v.token) return nil }) if err != nil { return err } // 处理响应 if resp.StatusCode() == 204 { return nil } // 处理错误情况 if resp.JSON404 != nil { return fmt.Errorf("not found: %s", resp.JSON404.Message) } if resp.JSON500 != nil { return fmt.Errorf("server error: %s", resp.JSON500.Message) } return fmt.Errorf("unknown error") } // Get implements ServiceProxy. func (v *VfsBookMarkService) Get(servicePath string, node *models.VfsNode) ([]byte, error) { ctx := context.Background() // 调用 bookmark 服务获取书签 resp, err := v.client.GetBookmarkWithResponse(ctx, int64(node.ID), func(ctx context.Context, req *http.Request) error { req.Header.Set("X-BookMark-Token", v.token) return nil }) if err != nil { return nil, err } // 处理响应 if resp.JSON200 != nil { data, err := json.Marshal(resp.JSON200) if err != nil { return nil, fmt.Errorf("marshal response error: %w", err) } return data, nil } // 处理错误情况 if resp.JSON404 != nil { return nil, fmt.Errorf("not found: %s", resp.JSON404.Message) } return nil, fmt.Errorf("unknown error") } // Update implements ServiceProxy. func (v *VfsBookMarkService) Update(servicePath string, node *models.VfsNode, data []byte) error { ctx := context.Background() // 解析传入的数据为 BookmarkRequest var req api.BookmarkRequest if err := json.Unmarshal(data, &req); err != nil { return err } // 调用 bookmark 服务更新书签 resp, err := v.client.UpdateBookmarkWithResponse(ctx, int64(node.ID), req, func(ctx context.Context, req *http.Request) error { req.Header.Set("X-BookMark-Token", v.token) return nil }) if err != nil { return err } // 处理响应 if resp.JSON200 != nil { return nil } // 处理错误情况 if resp.JSON400 != nil { return fmt.Errorf("bad request: %s", resp.JSON400.Message) } if resp.JSON404 != nil { return fmt.Errorf("not found: %s", resp.JSON404.Message) } if resp.JSON500 != nil { return fmt.Errorf("server error: %s", resp.JSON500.Message) } return fmt.Errorf("unknown error") } // GetName implements ServiceProxy. func (v *VfsBookMarkService) GetName() string { return "bookmark" } var _ vfs_service.ServiceProxy = (*VfsBookMarkService)(nil)