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;
}