项目
文档&文件
以下 API 都缺少 handlers 和 RPC interfaces
- 项目部分:
- 修改文件信息(文件名)
- 文档夹&文件夹
- 文档夹:创建、修改、删除
- 文件夹:创建、修改、删除
- 评论部分
- 文档评论:创建、获取、删除
- 文件评论(目前未用到):创建、获取、删除
可能还漏了其它的 API
权限问题
需要管理员及超管才能请求的 API 有:
- 创建项目
- 修改 project 信息
- 编辑 project 成员
- 文档夹/文件夹的删除
- 项目回收站的删除
只有超管才能请求:
允许管理员、超管和 object 所有者可以操作:
- 文档/文件的删除和修改
- 评论的删除
- 文档夹/文件夹的修改
对于一些 API 需要加上特定的权限。对于管理员或超管的部分,直接加上写好的中间件就可以了(adminRequired、superAdminRequired),而对于 object 所有者,可能需要在 handler 中进行权限鉴别。
其它
- 注释
- 函数注释依照
// 函数名 ... 的代码风格要求(已改部分)
router.go 中无用的注释去掉
- 返回的 response 最好加上注释,尤其是一些比较难理解的字段,让客户端人员容易理解。
- 命名规范:
- Go 变量驼峰命名,json 下划线命名。命名上,gateway 和 project 服务都有一些字段需要更改。既然是重构,那就尽量做到最好,从一开始就把这个问题解决了,不要留到以后。
- 结构体字面量尽量大驼峰命名
- 尽量不要自己创造缩写,容易造成疑惑,命名长一些没关系,关键是可读,比如
pid 就改成 projectID
- 写结构体成员 json 标签时会漏掉完整的双引号,比如
json:logo",需要注意下(已改)
query params,path params 这些获取失败返回的错误不应该是 errno.ErrBind,应该是 ErrQuery 或 ErrPathParam 之类的,Bind 是专门用于 body data 的,三者要区别开来。
项目
获取项目列表
getProjectList.go:是否分页其实不用客户端单独传一个参数来判定,根据 page 判断就可以了,比如 page 没传或是 -1 什么的,就表示不分页
删除项目
deleteProject.go:项目名应该不用由客户端来传,应该自己根据 id 来获取
project name,或是直接从删除接口返回的数据中获取修改项目信息
updateProjectInfo.go:userCount是项目的人数,不应该由客户端传的值来更改,而是通过计算 member 人数得到,而且 project 该接口也并没有用到userCount这个传过去的值,所以应当把这个移除,gateway 和 project 服务都要改。获取项目成员
getMembers.go:是否分页的问题,和 “获取项目列表” 那个一样编辑项目成员
updateMembers.go:文档&文件
修改文件树
updateFileTree.go:应该不需要新增 feed,修改文件树是在增加或删除文件操作之后的,feed 就是增加或删除文件。(不太确定)
修改文档树
updateDocTree.go:和上面的一样创建文档
createFile.go:feed push 参数有问题,缺少 project name、创建的文档 id,文档 id 应该是从文档创建的接口 response 中获取,需要修改对应的 RPC 接口
修改文档信息
updateDoc.go:feed push 同样的参数问题删除文档
deleteDoc.go:doc name 同样应该由 id 获取。feed push 参数缺少项目 id 和 name。创建文件
createFile.go:请求参数有问题,客户端传的参数应该只是文件、项目 id、文档夹 id,而不是包括文件 URL、文件 id 等等参数。该逻辑是后端需要把这个文件先传到 OSS 上,再把这个 OSS URL 存入 DB 中。或者分为两个 API,一个负责上传文件,一个根据文件url在DB中创建文件。
删除文件
deleteFile.go:fileName 根据 id 获取,而不是客户端传的值。feed push 的参数有问题,缺少项目 id 和 name。
以下 API 都缺少 handlers 和 RPC interfaces
可能还漏了其它的 API
权限问题
需要管理员及超管才能请求的 API 有:
只有超管才能请求:
允许管理员、超管和 object 所有者可以操作:
对于一些 API 需要加上特定的权限。对于管理员或超管的部分,直接加上写好的中间件就可以了(
adminRequired、superAdminRequired),而对于 object 所有者,可能需要在 handler 中进行权限鉴别。其它
// 函数名 ...的代码风格要求(已改部分)router.go中无用的注释去掉pid就改成projectIDjson:logo",需要注意下(已改)query params,path params这些获取失败返回的错误不应该是errno.ErrBind,应该是ErrQuery或ErrPathParam之类的,Bind 是专门用于 body data 的,三者要区别开来。