syntax = "proto3"; import "google/protobuf/empty.proto"; import "common/common.proto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/duration.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; // Коллекция без архива. Включение опции приведет к удалению всех записей в архиве, а функция архивирования станет недоступна optional bool disable_archive = 15; 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_revisions = 30; // без истории изменений (ревизии). История изменений записей в коллекции не будет сохраняться и вернуться к предыдущим версиям будет нельзя uint32 max_revisions = 31; // старые ревизии сверх указанного количества будут автоматически удаляться. 0, пусто - без ограничений google.protobuf.Duration revision_ttl = 32; // ревизии старше указанного времени хранения будут автоматически удалятся. 0, пусто - без ограничений } 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) {} }