-
Semyon Krestyaninov authoreddef5b657
collections.proto 6.38 KiB
syntax = "proto3";
import "google/protobuf/empty.proto";
import "common/common.proto";
import "google/protobuf/timestamp.proto";
option go_package = "git.perx.ru/perxis/perxis-go/proto/collections;collections";
package content.collections;
message Access {
repeated common.Action actions = 1;
repeated string hidden_fields = 5;
// Deprecated
repeated string readonly_fields = 6;
repeated string writeonly_fields = 7;
repeated string deny_read_fields = 8;
repeated string deny_write_fields = 9;
}
message Collection {
string id = 1;
string space_id = 2;
string env_id = 3;
string name = 4;
// Коллекция может содержать ровно одну запись. При работе с записью в такой коллекции идентификатор записи в
// обращениях в API можно не указывать и предполагать, что запись всегда есть (ее не нужно создавать)
optional bool single = 5;
optional bool system = 6;
// Коллекция не содержит данных. Возможно создание таких коллекций для использования как подключаемые подсхемы в
// других коллекциях
optional bool no_data = 12;
string schema = 7;
bool hidden = 13;
message View {
string space_id = 1;
string env_id = 2;
string collection_id = 3;
string filter = 4;
}
View view = 9;
enum State {
NEW = 0; // коллекция создана, еще не обработана
PREPARING = 1; // производится подготовка коллекции (создание индексов, копирование данных)
READY = 2; // коллекция готова к работе
ERROR = 3; // при обработке коллекции произошла ошибка
CHANGED = 4; // в коллекцию внесены изменения, но еще не были применены. Коллекция должна после перейти в состояние Preparing
}
message StateInfo {
State state = 1;
string info = 2;
google.protobuf.Timestamp started_at = 3;
}
StateInfo state_info = 10;
repeated string tags = 16;
Access access = 20; // Возможные действия с коллекцией на основе контекста запроса
// Все записи коллекции считаются опубликованными, функции публикации и снятия с публикации недоступны.
// При включении параметра коллекции "без публикации" все записи, независимо от статуса, будут считаться опубликованными.
// При отключении параметра "без публикации" статусы публикации будут восстановлены.
bool no_publish = 40;
}
message CreateRequest {
Collection collection = 1;
}
message CreateResponse {
Collection created = 1;
}
message GetOptions {
bool disable_schema_includes = 1;
}
message GetRequest {
string space_id = 1;
string env_id = 2;
string collection_id = 3;
GetOptions options = 4;
}
message GetResponse {
Collection collection = 1;
}
message ListRequest {
message Filter {
bool exclude_system = 1;
// bool exclude_no_data = 2;
bool include_no_data = 5;
bool include_hidden = 6;
repeated string name = 3;
repeated string id = 4;
}
string space_id = 1;
string env_id = 2;
Filter filter = 5;
}
message ListResponse {
repeated Collection collections = 1;
}
message UpdateRequest {
Collection collection = 1;
}
message SetSchemaRequest {
string space_id = 1;
string env_id = 2;
string collection_id = 3;
string schema = 4;
}
message DeleteRequest {
string space_id = 1;
string env_id = 2;
string collection_id = 3;
}
service Collections {
// Создать коллекцию. Установка схемы производится через отдельный метод `SetSchema` и методом `Create` игнорируется
rpc Create(CreateRequest) returns(CreateResponse) {}
// Получить коллекцию. Схема коллекции возвращается полная, т.е. включая все подключаемые подсхемы, если не указано
// обратное в `GetRequest.options`
rpc Get(GetRequest) returns(GetResponse) {}
// Возвращает список коллекций, отсортированных в алфавитном порядке. По умолчанию не возвращает коллекции без данных
// и скрытые коллекции, подробнее см. `ListRequest.filter`
rpc List(ListRequest) returns(ListResponse) {}
// Обновить коллекцию. Установка схемы производится через отдельный метод `SetSchema` и методом `Update` игнорируется
rpc Update(UpdateRequest) returns(google.protobuf.Empty) {}
// Установить схему коллекции. По результатам вызова метода не происходит *применение* схемы - например,
// не перестраиваются индексы БД коллекции, поскольку это может быть длительный процесс. После редактирования всех
// необходимых схем окружения необходимо их применить - выполнить миграцию путем вызова метода `Environments.Migrate`.
// Если схема коллекции изменена, но миграция еще не была запущена, коллекция будет находиться в состоянии `CHANGED`.
//
// Если в процессе миграции возникли ошибки, в соответствующие коллекции в поле `Collection.state_info` будет записано
// содержание ошибки и установлено состояние `ERROR`
rpc SetSchema(SetSchemaRequest) returns(google.protobuf.Empty) {}
// Удалить коллекцию
rpc Delete(DeleteRequest) returns(google.protobuf.Empty) {}
}