Skip to content
Snippets Groups Projects
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) {}
}