|
|
syntax = "proto3";
|
|
|
|
|
|
import "google/protobuf/timestamp.proto";
|
|
|
import "gogoproto/gogo.proto";
|
|
|
// import "validate/validate.proto";
|
|
|
import "google/api/annotations.proto";
|
|
|
import "google/protobuf/empty.proto";
|
|
|
import "api/v1/attachment.proto";
|
|
|
import "api/v1/user.proto";
|
|
|
|
|
|
package api.v1;
|
|
|
|
|
|
option go_package = "moredoc/api/v1;v1";
|
|
|
option java_multiple_files = true;
|
|
|
option java_package = "api.v1";
|
|
|
|
|
|
// 文档
|
|
|
message Document {
|
|
|
int64 id = 1; // 文档ID
|
|
|
string title = 2; // 文档标题
|
|
|
string keywords = 3; // 文档关键字
|
|
|
string description = 4; // 文档描述
|
|
|
int64 user_id = 5; // 文档作者
|
|
|
string cover = 6; // 文档封面
|
|
|
int32 width = 7; // 文档宽度
|
|
|
int32 height = 8; // 文档高度
|
|
|
int32 preview = 9; // 文档可预览页数,0表示不限制
|
|
|
int32 pages = 10; // 文档页数
|
|
|
string uuid = 11; // 文档UUID
|
|
|
int32 download_count = 12; // 文档下载次数
|
|
|
int32 view_count = 13; // 文档浏览次数
|
|
|
int32 favorite_count = 14; // 文档收藏次数
|
|
|
int32 comment_count = 15; // 文档评论次数
|
|
|
int32 score = 16; // 文档评分
|
|
|
int32 score_count = 17; // 文档评分次数
|
|
|
int32 price = 18; // 文档价格
|
|
|
int64 size = 19; // 文档大小
|
|
|
int32 status = 20; // 文档状态,见 web/utils/enum.js
|
|
|
google.protobuf.Timestamp created_at = 21
|
|
|
[ (gogoproto.stdtime) = true ]; // 文档创建时间
|
|
|
google.protobuf.Timestamp updated_at = 22
|
|
|
[ (gogoproto.stdtime) = true ]; // 文档更新时间
|
|
|
google.protobuf.Timestamp deleted_at = 23
|
|
|
[ (gogoproto.stdtime) = true ]; // 文档删除时间
|
|
|
google.protobuf.Timestamp recommend_at = 29
|
|
|
[ (gogoproto.stdtime) = true ]; // 文档推荐时间
|
|
|
int64 deleted_user_id = 24; // 删除文档的用户
|
|
|
string username = 25; // 文档作者用户名
|
|
|
repeated int64 category_id = 26; // 文档分类ID
|
|
|
string deleted_username = 27; // 删除文档的用户名
|
|
|
string ext = 28; // 文档扩展名
|
|
|
Attachment attachment = 30; // 文档附件
|
|
|
User user = 31; // 文档作者
|
|
|
bool enable_gzip = 32; // 是否启用gzip压缩
|
|
|
string convert_error = 33; // 转换错误信息
|
|
|
}
|
|
|
|
|
|
// 删除文档,放入回收站
|
|
|
message DeleteDocumentRequest { repeated int64 id = 1; }
|
|
|
|
|
|
// 恢复文档
|
|
|
message RecoverRecycleDocumentRequest { repeated int64 id = 1; }
|
|
|
|
|
|
// 查询文档
|
|
|
message GetDocumentRequest {
|
|
|
int64 id = 1; // 文档ID
|
|
|
bool with_author = 2; // 是否查询作者信息
|
|
|
}
|
|
|
|
|
|
// 文档列表
|
|
|
message ListDocumentRequest {
|
|
|
int64 page = 1; // 页码
|
|
|
int64 size = 2; // 每页数量
|
|
|
string wd = 3; // 搜索关键字
|
|
|
repeated string field = 4; // 查询字段
|
|
|
string order = 5; // 排序
|
|
|
repeated int64 category_id = 6; // 分类ID
|
|
|
repeated int64 user_id = 7; // 用户ID
|
|
|
repeated int32 status = 8; // 文档状态
|
|
|
repeated bool is_recommend = 9; // 是否推荐
|
|
|
int64 limit = 10; // 查询数量显示。当该值大于0时,page和size无效
|
|
|
}
|
|
|
|
|
|
// 文档列表
|
|
|
message ListDocumentReply {
|
|
|
int64 total = 1; // 文档总数
|
|
|
repeated Document document = 2; // 文档列表
|
|
|
}
|
|
|
|
|
|
// 创建文档
|
|
|
message CreateDocumentItem {
|
|
|
string title = 1; // 文档标题
|
|
|
int64 attachment_id = 2; // 文档附件ID
|
|
|
int32 price = 3; // 文档价格
|
|
|
}
|
|
|
|
|
|
// 创建文档
|
|
|
message CreateDocumentRequest {
|
|
|
bool overwrite = 1; // 是否覆盖。暂时用不到
|
|
|
repeated int64 category_id = 2; // 文档分类ID
|
|
|
repeated CreateDocumentItem document = 3; // 文档列表
|
|
|
}
|
|
|
|
|
|
// 设置文档推荐
|
|
|
message SetDocumentRecommendRequest {
|
|
|
repeated int64 id = 1; // 文档ID
|
|
|
int32 type = 2; // 0, 取消推荐,1:推荐 2:重新推荐
|
|
|
}
|
|
|
|
|
|
// 查询文档(针对首页的查询)
|
|
|
message ListDocumentForHomeRequest { int64 limit = 1; }
|
|
|
|
|
|
// 首页文档查询返回项
|
|
|
message ListDocumentForHomeItem {
|
|
|
int64 category_id = 1; // 分类ID
|
|
|
string category_cover = 2; // 分类封面
|
|
|
string category_name = 3; // 分类名称
|
|
|
repeated Document document = 4; // 文档列表
|
|
|
}
|
|
|
|
|
|
// 查询文档(针对首页的查询)
|
|
|
message ListDocumentForHomeResponse {
|
|
|
repeated ListDocumentForHomeItem document = 1; // 文档列表
|
|
|
}
|
|
|
|
|
|
// 文档搜索
|
|
|
message SearchDocumentRequest {
|
|
|
int32 page = 1; // 页码
|
|
|
int32 size = 2; // 每页数量
|
|
|
string wd = 3; // 搜索关键字
|
|
|
repeated int64 category_id = 4; // 分类
|
|
|
string sort = 5; // 排序
|
|
|
string ext = 7; // 类型
|
|
|
}
|
|
|
|
|
|
// 文档评分
|
|
|
message DocumentScore {
|
|
|
int64 id = 1; // 评分ID
|
|
|
int64 document_id = 2; // 文档ID
|
|
|
int64 user_id = 3; // 用户ID
|
|
|
int32 score = 4; // 评分,100~500,100为1分,500为5分
|
|
|
google.protobuf.Timestamp created_at = 5
|
|
|
[ (gogoproto.stdtime) = true ]; // 评分时间
|
|
|
google.protobuf.Timestamp updated_at = 6
|
|
|
[ (gogoproto.stdtime) = true ]; // 更新时间
|
|
|
}
|
|
|
|
|
|
// 文档搜索响应
|
|
|
message SearchDocumentReply {
|
|
|
int64 total = 1; // 文档总数
|
|
|
string spend = 2; // 搜索耗时
|
|
|
repeated Document document = 3; // 文档列表
|
|
|
}
|
|
|
|
|
|
// 文档下载
|
|
|
message DownloadDocumentReply { string url = 1; }
|
|
|
|
|
|
// 文档服务
|
|
|
service DocumentAPI {
|
|
|
|
|
|
// 针对首页的文档查询
|
|
|
rpc ListDocumentForHome(ListDocumentForHomeRequest)
|
|
|
returns (ListDocumentForHomeResponse) {
|
|
|
option (google.api.http) = {
|
|
|
get : '/api/v1/document/home',
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// 设置文档推荐
|
|
|
rpc SetDocumentRecommend(SetDocumentRecommendRequest)
|
|
|
returns (google.protobuf.Empty) {
|
|
|
option (google.api.http) = {
|
|
|
put : '/api/v1/document/recommend',
|
|
|
body : '*',
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// 创建文档
|
|
|
rpc CreateDocument(CreateDocumentRequest) returns (google.protobuf.Empty) {
|
|
|
option (google.api.http) = {
|
|
|
post : '/api/v1/document',
|
|
|
body : '*',
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// 更新文档
|
|
|
rpc UpdateDocument(Document) returns (google.protobuf.Empty) {
|
|
|
option (google.api.http) = {
|
|
|
put : '/api/v1/document',
|
|
|
body : '*',
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// 删除文档
|
|
|
rpc DeleteDocument(DeleteDocumentRequest) returns (google.protobuf.Empty) {
|
|
|
option (google.api.http) = {
|
|
|
delete : '/api/v1/document',
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// 查询文档
|
|
|
rpc GetDocument(GetDocumentRequest) returns (Document) {
|
|
|
option (google.api.http) = {
|
|
|
get : '/api/v1/document',
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// 根据文档ID查询当前文档的相关文档
|
|
|
rpc GetRelatedDocuments(Document) returns (ListDocumentReply) {
|
|
|
option (google.api.http) = {
|
|
|
get : '/api/v1/document/related',
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// 根据文档ID,获取文档下载链接
|
|
|
rpc DownloadDocument(Document) returns (DownloadDocumentReply) {
|
|
|
option (google.api.http) = {
|
|
|
get : '/api/v1/document/download',
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// 文档列表查询
|
|
|
rpc ListDocument(ListDocumentRequest) returns (ListDocumentReply) {
|
|
|
option (google.api.http) = {
|
|
|
get : '/api/v1/document/list',
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// 文档搜索
|
|
|
rpc SearchDocument(SearchDocumentRequest) returns (SearchDocumentReply) {
|
|
|
option (google.api.http) = {
|
|
|
get : '/api/v1/document/search',
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// 设置文档评分
|
|
|
rpc SetDocumentScore(DocumentScore) returns (google.protobuf.Empty) {
|
|
|
option (google.api.http) = {
|
|
|
post : '/api/v1/document/score',
|
|
|
body : '*',
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// 获取当前登录用户的文档评分
|
|
|
rpc GetDocumentScore(DocumentScore) returns (DocumentScore) {
|
|
|
option (google.api.http) = {
|
|
|
get : '/api/v1/document/score',
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// 将文档一键设置为重转
|
|
|
rpc SetDocumentReconvert(google.protobuf.Empty)
|
|
|
returns (google.protobuf.Empty) {
|
|
|
option (google.api.http) = {
|
|
|
put : '/api/v1/document/reconvert',
|
|
|
};
|
|
|
}
|
|
|
}
|
|
|
|
|
|
service RecycleAPI {
|
|
|
// 文档回收站列表
|
|
|
rpc ListRecycleDocument(ListDocumentRequest) returns (ListDocumentReply) {
|
|
|
option (google.api.http) = {
|
|
|
get : '/api/v1/document/recycle',
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// 恢复回收站文档,支持恢复单个文档或者是批量恢复
|
|
|
rpc RecoverRecycleDocument(RecoverRecycleDocumentRequest)
|
|
|
returns (google.protobuf.Empty) {
|
|
|
option (google.api.http) = {
|
|
|
put : '/api/v1/document/recycle',
|
|
|
body : '*',
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// 删除回收站文档
|
|
|
rpc DeleteRecycleDocument(DeleteDocumentRequest)
|
|
|
returns (google.protobuf.Empty) {
|
|
|
option (google.api.http) = {
|
|
|
delete : '/api/v1/document/recycle',
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// 清空回收站文档
|
|
|
rpc ClearRecycleDocument(google.protobuf.Empty)
|
|
|
returns (google.protobuf.Empty) {
|
|
|
option (google.api.http) = {
|
|
|
delete : '/api/v1/document/recycle/all',
|
|
|
};
|
|
|
}
|
|
|
} |