meta/area/area.proto

syntax = "proto3";

package jsgenerate_kb2022.meta.area;
option go_package = "gateway/protocol/meta/area";

import "google/api/annotations.proto";
import "google/api/httpbody.proto";

// 區域相關
service Area {
    // 添加一個區域
    rpc Add (AddRequest) returns (AddResponse){
        option (google.api.http) = {
            post: "/api/v1/meta/area"
            body: "*"
        };
    }
    // 導入區域
    // 對於 http 可以請求 /api/v1/meta/area/import_file 進行檔案上傳
    // curl -X POST -F "attachment=@/tmp/somefile.txt" http://localhost/api/v1/meta/area/import_file
    rpc Import (ImportRequest) returns (ImportResponse){
        option (google.api.http) = {
            post: "/api/v1/meta/area/import"
            body: "*"
        };
    }
    // 導出區域
    rpc Export (ExportRequest) returns (google.api.HttpBody){
        option (google.api.http) = {
            get: "/api/v1/meta/area/export"
        };
    }

    // 修改區域屬性
    rpc Change (ChangeRequest) returns (ChangeResponse){
        option (google.api.http) = {
            patch: "/api/v1/meta/area"
            body: "*"
        };
    }
    // 停用區域
    rpc Disable (DisableRequest) returns (DisableResponse){
        option (google.api.http) = {
            delete: "/api/v1/meta/area"
        };
    }

    // 返回所有啓用的區域
    rpc List (ListRequest) returns (ListResponse){
        option (google.api.http) = {
            get: "/api/v1/meta/area/list"
        };
    }
    // 返回所有啓用的 根節點(所有頂級區域)
    rpc Root (RootRequest) returns (ListResponse){
        option (google.api.http) = {
            get: "/api/v1/meta/area/list/root"
        };
    }
    // 返回所有 以指定邏輯碼開頭且被啓用的區域 (列出指定區域和其所有子區域)
    rpc ListByLogic (ListByLogicRequest) returns (ListResponse){
        option (google.api.http) = {
            get: "/api/v1/meta/area/list/by_logic"
        };
    }

    // 返回指定 id 的區域,僅用於顯示歷史數據
    rpc ID (IDRequest) returns (IDResponse){
        option (google.api.http) = {
            get: "/api/v1/meta/area/by_id"
        };
    }
}
message View{
    // 區域唯一識別代碼
    int64 id = 1;
    // 區域邏輯碼
    // 父區域邏輯碼固定爲 logic[:len(logic)-2],所以可知根節點的 len(logic) == 2
    string logic = 2;
    // 區域戶名
    string name = 3;
    // 該區域下包含多少個設備
    uint32 device = 4;
}
// 代表一個區域資源
message Assets{
    int64 id = 1;
    string logic = 2;
}
message AddRequest{
    string logic = 1;
    string name = 2;
}
message AddResponse{
    // 添加成功時返回 添加的 區域 id
    int64 id = 1;
}
message ImportRequest{
    // 導入數據 必須是 utf8 文本
    // 一行一個區域, 區域碼 和 區域名稱以 空格隔開例如
    // 如果行以 # 字符作爲開頭則表示註釋,解析器將忽略此行內容
    // 5101 成都
    // 510101 錦江區
    // 510102 成華區
    string text = 1;
}
message ImportResponse{
    int64 changed = 1;
}
message ExportRequest{
    // 要導出區域的邏輯碼
    string logic = 1;
}
message ChangeRequest{
    // 要修改的區域
    Assets assets = 1;
    // 要變更的名稱
    string name = 2;
}
message ChangeResponse{
}
message DisableRequest{
    // 要停用的區域
    Assets assets = 1;
}
message DisableResponse{
    int64 changed = 1;
}

message ListRequest{
}
message RootRequest{
}
message ListByLogicRequest{
    string logic = 1;
}
message ListResponse{
    repeated Data data = 1;
}

message Data{
    // 區域唯一識別代碼
    int64 id = 1;
    // 區域邏輯碼
    // 父區域邏輯碼固定爲 logic[:len(logic)-2]
    string logic = 2;
    // 區域戶名
    string name = 3;
    // 該區域下包含多少個設備
    uint32 device = 4;
    // 是否被停用
    bool disabled = 5;
    // 被停用的時間
    int64 disabledAt = 6;
}
message IDRequest{
    repeated int64 id = 1;
}
message IDResponse{
    repeated Data data = 1;
}