assets/audio/audio.proto
syntax = "proto3";
package jsgenerate_kb2022.assets.audio;
option go_package = "gateway/protocol/assets/audio";
import "google/api/annotations.proto";
import "google/api/httpbody.proto";
import "adadd52b-e7a2-4fe2-9f15-356ceddbd4f6/utils/utils.proto";
// 音頻資產
service Audio {
// 創建一個音頻資產
rpc Create (CreateRequest) returns (CreateResponse){
option (google.api.http) = {
post: "/api/v1/assets/audio"
body: "*"
};
}
// 返回音頻 分塊的 md5 值
rpc Chunks (ChunksRequest) returns (ChunksResponse){
option (google.api.http) = {
get: "/api/v1/assets/audio/chunks"
};
}
// 上傳分塊
// 對於 http 也可以請求 /api/v1/assets/audio/chunk_file/{id} 並將二進制數據寫入 body 進行上傳
rpc Chunk (ChunkRequest) returns (ChunkResponse){
option (google.api.http) = {
post: "/api/v1/assets/audio/chunk"
body: "*"
};
}
// 將分塊數據合併爲一個完整檔案,並提交給系統審覈
rpc Merge (MergeRequest) returns (MergeResponse){
option (google.api.http) = {
post: "/api/v1/assets/audio/merge"
body: "*"
};
}
// 返回用戶所有未完成的檔案上傳列表
rpc ListDraft (ListRequest) returns (ListResponse){
option (google.api.http) = {
get: "/api/v1/assets/audio/drafts/{uid}"
};
}
// 用戶刪除未傳輸完成的草稿
rpc DeleteDraft (DeleteDraftRequest) returns (DeleteDraftResponse){
option (google.api.http) = {
delete: "/api/v1/assets/audio/drafts/{id}"
};
}
// 範圍 指定 id 的資產
rpc ID (IDRequest) returns (IDResponse){
option (google.api.http) = {
get: "/api/v1/assets/audio/by_id"
};
}
// 將被拒絕的資產重新提交
rpc Submit (SubmitRequest) returns (SubmitResponse){
option (google.api.http) = {
post: "/api/v1/assets/audio/submit/{id}"
};
}
// 返回用戶所有被拒絕的資產
rpc ListReject (ListRequest) returns (ListResponse){
option (google.api.http) = {
get: "/api/v1/assets/audio/rejects/{uid}"
};
}
// 將被拒絕的資產刪除
rpc DeleteReject (DeleteRejectRequest) returns (DeleteRejectResponse){
option (google.api.http) = {
delete: "/api/v1/assets/audio/reject/{id}"
};
}
// 查找資源
rpc Find (FindRequest) returns (FindResponse){
option (google.api.http) = {
get: "/api/v1/assets/audio"
};
}
// 管理員審覈通過資源
rpc Resolve (ResolveRequest) returns (ResolveResponse){
option (google.api.http) = {
post: "/api/v1/assets/audio/resolve/{id}"
};
}
// 管理員拒絕資產審覈
rpc Reject (RejectRequest) returns (RejectResponse){
option (google.api.http) = {
post: "/api/v1/assets/audio/reject/{id}"
};
}
// 管理員停用資產
rpc Disable (DisableRequest) returns (DisableResponse){
option (google.api.http) = {
post: "/api/v1/assets/audio/disable/{id}"
};
}
// 管理員將停用的資產恢復以繼續使用
rpc Recover (RecoverRequest) returns (RecoverResponse){
option (google.api.http) = {
post: "/api/v1/assets/audio/recover/{id}"
};
}
// 管理員刪資產
rpc Delete (DeleteRequest) returns (DeleteResponse){
option (google.api.http) = {
delete: "/api/v1/assets/audio/{id}"
};
}
// Download file
rpc Download (DownloadRequest) returns (stream google.api.HttpBody){
option (google.api.http) = {
get: "/api/v1/assets/audio/download/{id}"
};
}
}
message Data{
// 唯一識別號
int64 id = 1;
// 資產名稱
string name = 2;
// 資產描述信息
string describe = 3;
// 資產 md5
string hash = 4;
// 資產狀態
// * 1 草稿
// * 2 上傳完成
// * 3 審覈通過
// * 4 審覈被拒絕
// * 5 停用
// * 6 等待刪除
// * 7 刪除完成
uint32 state = 5;
// 當 state == 4 時有效,資產被拒絕時管理員給出的拒絕理由
string reject = 6;
// 創建時間 unix
int64 create = 7;
// 上傳者
int64 uper = 8;
// 審覈時間 unix
int64 review = 9;
//審覈者
int64 reviewer = 10;
// 資產被停用時間
int64 disable = 11;
// 誰禁用了資源
int64 disableUser = 12;
// 資產被重新啓用時間
int64 enable = 13;
// 誰在資源禁用後又重新啓用了資源
int64 enableUser = 14;
// 資產被刪除時間
int64 delete = 15;
// 誰刪除了資源
int64 deleteUser = 16;
// 音頻長度 毫秒
uint32 duration = 17;
}
message CreateRequest{
// md5 值
string hash = 1;
// 資產名稱
string name = 2;
// 資產描述信息
string describe = 3;
}
message CreateResponse{
// 完成上傳,通常是因爲服務器已經存在了此資源,服務器直接創建了副本故不再需要繼續上傳檔案數據。
bool completed = 1;
// 資源 id
int64 id = 2;
}
message ChunksRequest{
// 資產 id
int64 id = 1;
// 分塊 hash
repeated string chunks = 2;
}
message ChunksResponse{
// 分塊是否存在
repeated bool exists = 1;
}
message ChunkRequest{
// 資產 id
int64 id = 1;
// 分塊數據
bytes data = 2;
}
message ChunkResponse{
}
message MergeRequest{
// 資產 id
int64 id = 1;
// 資產分塊 md5
repeated string chunks = 2;
}
message MergeResponse{
}
message ListRequest{
// 當前用戶 id,如果和 session 不匹配將返回錯誤
int64 uid = 1;
}
message ListResponse{
repeated Data data = 1;
}
message DeleteDraftRequest{
int64 id = 1;
}
message DeleteDraftResponse{
}
message IDRequest{
repeated int64 id = 1;
}
message IDResponse{
repeated Data data = 1;
}
message SubmitRequest{
int64 id = 1;
}
message SubmitResponse{
}
message DeleteRejectRequest{
int64 id = 1;
}
message DeleteRejectResponse{
}
message FindRequest{
jsgenerate_kb2022.utils.FindLimit limit = 1;
// id not in (...)
repeated int64 notID = 50;
// 資產id in
repeated int64 id = 2;
// 返回指定狀態的資產
repeated uint32 state = 3;
// 資產名稱 like
string name = 4;
// 上傳者 uid in ,用於查詢指定用戶上傳了哪些資源
repeated int64 uper = 5;
// 審覈者 uid in ,用戶查詢指定用戶審覈了哪些資源
repeated int64 reviewer = 6;
// 禁用資源者 uid in,用於查詢指定用戶禁用了哪些資源
repeated int64 disable = 7;
// 啓用資源者 uid in,用於查詢用戶啓用了哪些資源
repeated int64 enable = 8;
// 刪除資源者 uid in,用於查詢用戶刪除了哪些資源
repeated int64 delete = 9;
// 如果 大於 0 返回在此時間或之後創建的資產
int64 afterCreate = 10;
// 如果 大於 0 返回在此時間或之前創建的資產
int64 beforeCreate = 11;
// 如果 大於 0 返回在此時間或之後 通過審覈 的資產
int64 afterReview = 12;
// 如果 大於 0 返回在此時間或之前 通過審覈 創建的資產
int64 beforeReview = 13;
// (單位:毫秒)如果 大於 0 返回時長比此值大或相等的資產
int64 moreDuration = 20;
// (單位:毫秒)如果 大於 0 返回時長比此值小或相等的資產
int64 lessDuration = 21;
}
message FindResponse{
jsgenerate_kb2022.utils.FindResult result = 1;
repeated Data data = 2;
}
message ResolveRequest{
int64 id = 1;
}
message ResolveResponse{
}
message RejectRequest{
int64 id = 1;
// 拒絕理由描述給 上傳者查看
string message = 2;
}
message RejectResponse{
}
message DisableRequest{
int64 id = 1;
}
message DisableResponse{
}
message RecoverRequest{
int64 id = 1;
}
message RecoverResponse{
}
message DeleteRequest{
int64 id = 1;
}
message DeleteResponse{
}
message DownloadRequest{
int64 id=1;
// 0 下載 上傳的 媒體資源
// 1 下載 檔案直播 保存的記錄
// 2 下載 即時直播 保存的記錄
int32 file=2;
}