feat(bookmark): 添加 Authorization 请求头支持

为 CORS 配置添加 `Authorization` 请求头,以支持携带认证信息的跨域请求。

feat(user-np): 改进错误信息和用户注册流程

- 在注册 VFS 服务失败时返回更详细的错误信息,包括状态码和响应体内容。
- 用户创建失败时返回具体的错误详情,并确保数据库记录被正确回滚。
- 注销用户时先尝试删除 VFS 服务中的相关资源,再执行数据库删除操作。
- 使用 `Unscoped().Delete()` 确保物理删除用户数据。

feat(vfs): 完善用户目录结构及节点创建逻辑

- 创建用户主目录 `/home/username` 及其子目录 `.Recycle_Bin`。
- 调整 `CreateVFSNode` 方法参数类型为值传递。
- 修复创建用户目录时传参不一致的问题。
- 删除用户时递归清理其在 VFS 中的所有节点,并通过代理删除关联的服务节点。

feat(mage): 新增生成 TypeScript 类型定义的任务

新增 `Gen_TS` Mage 任务用于将 OpenAPI 配置文件转换为 TypeScript 类型定义文件,
支持 `vfs`、`bookmark` 和 `user_np` 模块。
This commit is contained in:
zzy
2025-09-28 12:28:22 +08:00
parent a3033bbf67
commit 429a863b76
6 changed files with 83 additions and 24 deletions

View File

@ -57,7 +57,7 @@ func (u *UserNPImpl) RegisterVFSService(username, token string) (*string, error)
}
if reqs.StatusCode() != http.StatusCreated {
return nil, fmt.Errorf("failed to register vfs service: %s", reqs.Status())
return nil, fmt.Errorf("failed to register vfs service: %s %s", reqs.Status(), string(reqs.Body))
}
tokenHeader := reqs.HTTPResponse.Header.Get("X-VFS-Token")
@ -148,12 +148,13 @@ func (u *UserNPImpl) UserRegister(c *gin.Context, username string) {
// 保存到数据库
if err := u.db.Create(&user).Error; err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "用户创建失败"})
c.JSON(http.StatusInternalServerError, gin.H{"error": "用户创建失败", "detail": err.Error()})
return
}
if token, err := u.RegisterVFSService(username, u.vfsToken); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "无法生成访问令牌"})
u.db.Delete(&user)
c.JSON(http.StatusInternalServerError, gin.H{"error": "无法生成访问令牌", "detail": err.Error()})
u.db.Unscoped().Delete(&user)
} else {
user.Token = token
u.db.Save(&user)
@ -182,7 +183,12 @@ func (u *UserNPImpl) DeleteUser(c *gin.Context, username string) {
return
}
u.db.Delete(&user)
if err := u.UnregisterVFSService(username, u.vfsToken); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "无法注销访问令牌", "detail": err.Error()})
return
}
u.db.Unscoped().Delete(&user)
c.JSON(http.StatusNoContent, nil)
}