Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
Loading items

Target

Select target project
  • perxis/perxis-proto
1 result
Select Git revision
Loading items
Show changes
Commits on Source (38)
......@@ -36,12 +36,7 @@ message Client {
// Приложение отключено и не может авторизоваться
optional bool disabled = 7;
// // Приложение имеет доступ к указанным окружениям пространства (ID или Alias)
// repeated string environments = 8;
//
// // Список правил доступа к коллекциям
// repeated common.Rule rules = 9;
// Идентификатор роли клиента
string role_id = 8;
OAuth oauth = 10;
......
......@@ -20,8 +20,14 @@ message Collection {
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;
......@@ -49,7 +55,7 @@ message Collection {
StateInfo state_info = 10;
repeated string tags = 16;
Access access = 20;
Access access = 20; // Возможные действия с коллекцией на основе контекста запроса
}
message CreateRequest {
......@@ -110,10 +116,30 @@ message DeleteRequest {
}
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) {}
}
......@@ -6,44 +6,6 @@ package common;
import "google/protobuf/struct.proto";
message Error {
message BadRequest {
message FieldViolation {
string field = 1;
string description = 2;
}
repeated FieldViolation errors = 1;
}
message Help {
message Link {
string description =1;
string url = 2;
}
repeated Link links = 1;
}
message DebugInfo {
repeated string stack_trace = 1;
string detail = 2;
}
message LocalizedMessage {
string locale = 1;
string message = 2;
}
uint64 error_code = 1; // Код ошибки
string error_id = 2; // ID конкретного инцидента, ID уникальна для каждого случая.
string reason = 3; // ???
string domain = 4; // Сервис,Пакет к которому относится ошибка
map<string,string> metadata = 9; // Мета-информация
BadRequest bad_request = 10; // Ошибка запроса
DebugInfo debug_info = 11; // Отладочная информация
Help help = 100; // Пользовательская информации и инструкции
repeated LocalizedMessage localized_messages = 200; // Перевод сообщения об ошибке
}
message Filter {
string op = 1;
string field = 2;
......
syntax = "proto3";
option go_package = "git.perx.ru/perxis/perxis-go/proto/common;common";
package common;
import "google/protobuf/struct.proto";
message Error {
message BadRequest {
message FieldViolation {
string field = 1;
string description = 2;
}
repeated FieldViolation errors = 1;
}
message Help {
message Link {
string description =1;
string url = 2;
}
repeated Link links = 1;
}
message DebugInfo {
repeated string stack_trace = 1;
string detail = 2;
}
message LocalizedMessage {
string locale = 1;
string message = 2;
}
uint64 error_code = 1; // Код ошибки
string error_id = 2; // ID конкретного инцидента, ID уникальна для каждого случая.
string reason = 3; // ???
string domain = 4; // Сервис, пакет к которому относится ошибка
string message = 5; // Текст ошибки
string details = 6; // Дополнительные детали об ошибке
map<string,string> metadata = 9; // Мета-информация
BadRequest bad_request = 10; // Ошибка запроса
DebugInfo debug_info = 11; // Отладочная информация
Help help = 100; // Пользовательская информации и инструкции
repeated LocalizedMessage localized_messages = 200; // Перевод сообщения об ошибке
repeated Error errors = 500; // Вложенные ошибки
}
syntax = "proto3";
package common;
import "google/protobuf/timestamp.proto";
import "google/protobuf/any.proto";
import "common/error.proto";
option go_package = "git.perx.ru/perxis/perxis-go/proto/common;common";
// Операция
message Operation {
// ID операции
string id = 1;
// Описание операции
string description = 2;
// Время создания операции
google.protobuf.Timestamp created_at = 3;
// Создатель операции
string created_by = 4;
// Время последнего изменения операции
google.protobuf.Timestamp modified_at = 6;
// Операция завершена
bool done = 7;
// Метаданные операции
google.protobuf.Any metadata = 8;
// Результат выполнения операции
oneof result {
// Результат выполнения операции в случае успеха
google.protobuf.Any response = 9;
// Результат выполнения операции в случае ошибки
Error error = 10;
}
}
syntax = "proto3";
option go_package = "git.perx.ru/perxis/perxis-go/proto/common;common";
package common;
import "common/operation.proto";
import "common/validation.proto";
service OperationService {
// Возвращает статус операции и ее результат, если она завершена
rpc Get (GetOperationRequest) returns (Operation) {}
// Отменяет выполнение операции, если это поддерживается сервисом
rpc Cancel (CancelOperationRequest) returns (Operation) {}
}
message GetOperationRequest {
string operation_id = 1 [(required) = true];
}
message CancelOperationRequest {
string operation_id = 1 [(required) = true];
}
syntax = "proto3";
package common;
option go_package = "git.perx.ru/perxis/perxis-go/proto/common;common";
import "google/protobuf/descriptor.proto";
extend google.protobuf.OneofOptions {
bool exactly_one = 101400;
}
extend google.protobuf.FieldOptions {
bool required = 101501;
string pattern = 101502;
string value = 101503;
string size = 101504;
string length = 101505;
bool unique = 101506;
MapKeySpec map_key = 101510;
string bytes = 101511;
}
message MapKeySpec {
string value = 1;
string pattern = 2;
string length = 3;
}
\ No newline at end of file
......@@ -92,7 +92,8 @@ message MigrateRequest {
message MigrateOptions {
// Ожидать завершения миграции в синхронном режиме. Если в запрос передан контекст с таймаутом,
// то после истечения таймаута миграция продолжится в асинхронном режиме
bool wait = 1;
bool wait = 1; // Deprecated - миграция по умолчанию выполняется синхронно
bool async = 2; // Выполнить миграцию в асинхронном режиме
}
service Environments {
......@@ -103,5 +104,13 @@ service Environments {
rpc SetAlias(SetAliasRequest) returns(google.protobuf.Empty) {}
rpc RemoveAlias(RemoveAliasRequest) returns(google.protobuf.Empty) {}
rpc Delete(DeleteRequest) returns(google.protobuf.Empty) {}
// Выполнить миграцию окружения. По умолчанию выполняется в синхронном режиме, для асинхронного выполнения можно
// передать соответствующую настройку в опциях `MigrateRequest.options`
//
// При вызове миграции:
// - выполняются миграции для всех коллекций окружения
//
// В случае возникновения ошибок миграции они записываются в поле `Environment.state`
rpc Migrate(MigrateRequest) returns(google.protobuf.Empty) {}
}
\ No newline at end of file
......@@ -16,151 +16,21 @@ package extensions;
import "references/references.proto";
// Extension - API расширения
service Extension {
// Для установки расширения выполняется запрос к сервису с указанием расширений которые должны быть установлены. Если
// расширение уже установлено процесс возвращает ошибку.
rpc Install(InstallRequest) returns (InstallResponse) {}
// Можно запросить проверку статуса установки для расширения. При этом расширение проверяет наличие необходимых данных в
// пространстве или наличие новой версии расширения и сообщает об этом. Никаких действий с данными пространства не
// производится.
rpc Check(CheckRequest) returns (CheckResponse) {}
// Сервис выполняет необходимые действия с данными и миграции для соответствия нужной версии расширения.
// Если расширение не установлено процесс обновления возвращает ошибку.
rpc Update(UpdateRequest) returns (UpdateResponse) {}
// Удаление расширения из пространства.
rpc Uninstall(UninstallRequest) returns (UninstallResponse) {} // Удаление расширений
// Пользовательские Действия (Actions)
//
// Пользовательские действия позволяют расширить функционал пользовательского интерфейса путем
// добавления в интерфейс элементов взаимодействуя с которыми пользователь может вызывать реакцию на
// сервере или переход в интерфейсе.
//
// Пользовательские действия добавляются при установке расширений в системную коллекции `System/Actions`.
// Коллекция создается автоматически менеджером расширений. При установке так же отображается меню `Действия`
// доступное для всех пользователей.
//
// Примеры пользовательских действий:
// - "Собрать сайт" - добавляется Perxis.Web для сборки сайта, доступна пользователю через меню,
// параметры space_id, env_id. При вызове выполняется запрос на сервер ProcessAction.
// - "Посмотреть задачи" - добавляется Tasks для перехода на коллекцию задач. Отображается в меню,
// параметры space_id, env_id.
//
// Приложения так же могут использовать действия для вызова обработки в других приложениях при
// необходимости.
rpc Action(ActionRequest) returns(ActionResponse) {} // Выполнить указанное действие
}
message InstallRequest {
repeated string extensions = 10000; // Список расширений для установки
string space_id = 10010; // Пространство для установки расширений
string env_id = 10020; // Идентификатор окружения для установки (по умолчанию master)
bool force = 10100; // Игнорировать и автоматически исправлять ошибки установки
}
message ExtensionRequestResult {
enum State {
OK = 0; // Запрос завершен
ERROR = 1; // Возникла ошибка
PENDING = 2; // Запрос ожидает выполнения
IN_PROGRESS = 3; // Запрос выполняется
PARAMETERS_REQUIRED= 4; // Требуются дополнительные данные для выполнения запроса
}
State state = 10000; // Состояние расширение
string extension = 10100; // Имя расширения
string msg = 10200; // Сообщение
string error = 10300; // Ошибка (state == ERROR)
bool update_available = 10400; // Доступно обновление
}
message InstallResponse {
repeated ExtensionRequestResult results = 10000; // Список состояний расширений после установки
}
message UninstallRequest {
repeated string extensions = 10000; // Список расширений для удаления
string space_id = 10010; // Пространство для удаления расширений
string env_id = 10020; // Идентификатор окружения для установки (по умолчанию master)
bool remove = 10100; // Удалить все коллекции и данные
bool force = 10200; // Удалять расширения вне зависимости от возможных ошибок, без учета зависимостей
}
message UninstallResponse {
repeated ExtensionRequestResult results = 10000; // Список состояний расширений после удаления
}
message UpdateRequest {
repeated string extensions = 10000; // Список расширений для удаления
string space_id = 10010; // Пространство для удаления расширений
string env_id = 10020; // Идентификатор окружения для установки (по умолчанию master)
bool force = 10100; // Выполнять обновление и автоматически исправлять ошибки
}
message UpdateResponse {
repeated ExtensionRequestResult results = 10000; // Список состояний расширений после удаления
}
message CheckRequest {
repeated string extensions = 10000; // Список расширений для удаления
string space_id = 10010; // Пространство для удаления расширений
string env_id = 10020; // Идентификатор окружения для установки (по умолчанию master)
}
message CheckResponse {
repeated ExtensionRequestResult results = 10000; // Список состояний расширений
}
// ActionRequest - запрос на выполнение действия к расширению (или менеджеру расширений)
message ActionRequest {
string extension = 1000;
string action = 10100;
string space_id = 10500;
string env_id = 10510;
string collection_id = 10520;
string item_id = 10530;
repeated string item_ids = 10540;
// Поля к которым применимо действие. В случае если действие выполняется из списка записей, содержит перечень
// полей которые пользователь выбрал для отображения в интерфейсе.
repeated string fields = 10550;
map<string,string> metadata = 11000;
// Ссылки на записи используемые для выполнения действия (назначение ссылок зависит от действия и расширения)
repeated content.references.Reference refs = 11010;
// Ссылка на документ с параметрами выполнения Action.
// Чтобы при выполнении действия открывалась форма параметров, необходимо указать `Action.params_collection`
content.references.Reference params = 11020;
}
message ActionResponse {
enum State {
DONE = 0; // Запрос завершен
ERROR = 1; // Возникла ошибка
PENDING = 2; // Запрос ожидает выполнения
IN_PROGRESS = 3; // Запрос выполняется
PARAMETERS_REQUIRED = 4; // Требуются дополнительные данные для выполнения запроса
}
State state = 10000; // Состояние расширение
string msg = 10100; // Сообщение о выполнении действия
string error = 10200; // Сообщение в случае ошибки
repeated Action next = 10300; // Следующие возможные действия. Интерфейс отображает как варианты дальнейших действий пользователя
map<string,string>metadata = 10400; // Метаданные запроса
repeated content.references.Reference refs = 10320; // Ссылки на записи (назначение ссылок зависит от действия и расширения)
// Target - определяет как открывать результат выполнения действия в пользовательском интерфейсе
enum Target {
DEFAULT = 0; // По умолчанию (если нет других условий, то MODAL)
MODAL = 1; // Открывать в модальном окне
WIDE = 2; // Открывать в широком модальном окне
MAIN = 4; // Открывать в главной рабочей области (часть без меню)
DRAWER = 5; // Открывать в боковой панели
NOTIFICATION = 6; // Открывать виде всплывающего уведомлении
BLANK = 7; // Открывать в новой вкладке
NONE = 100; // Не отображать результат
}
/**
Action описывает как коллекцию в системе с предуставновленными действиями, так и возможные дальнейшие действия после
Action описывает как коллекцию в системе с предустановленными действиями, так и возможные дальнейшие действия после
получения ответа (см. `ActionResponse.next`)
Если поле `request` присутствует, но не все требуемые поля заполнены, то значения для них берутся из текущих значений.
......@@ -178,7 +48,7 @@ message Action {
// Kind описывает c какой сущность системы связано действие и что требуется передать в качестве параметров
// Интерфейс загружает пользовательские действия и отображает их в интерфейсе в зависимости от ActionType.
enum Kind {
DEFAULT = 0; // Действие не отображается в интерфейсе и могут используется для выполнения дополнительных запросов (см. `ActionResponse.next`) или напрямую из сторонних приложений.
DEFAULT = 0; // Действие не отображается в интерфейсе и может использоваться для выполнения дополнительных запросов (см. `ActionResponse.next`) или напрямую из сторонних приложений.
SPACE = 1; // Действие связано с пространством (требуется передача space_id). Отображается в меню "Действия".
ENVIRONMENT = 2; // Действие связано с окружением (требуется передача space_id, env_id). Отображается в меню "Действия".
COLLECTION = 3; // Действие связано с коллекцией (требуется передача space_id, env_id, collection_id). Отображается на экране списка записей.
......@@ -188,14 +58,43 @@ message Action {
CREATE = 7; // Действие создание записи (требуется передача space_id, env_id, collection_id).
}
// DEPRECATED: Используйте `action` в формате URI
string extension = 10000; // Расширение
string action = 10100; // Идентификатор действия
// Идентификатор действия (в формате URI)
// Варианты использования:
// - пустой - никаких действий не выполняется
// - `action_id` - простое действие (если установлено значение `extension`, то оно используется)
// - `grpc:///extension_id/action_id` - полное действие с указанием расширения
// - `https://host/path` - действие по HTTP(S)
// - `ui:///path` - действие в интерфейсе
// - `/path` - действие в интерфейсе - DEPRECATED: Используйте `ui:///path`
//
// Пример: `https://example.com/api/v1/action` - будет выполнен запрос HTTP по указанному URL.
// Сервер может вернуть ответ в формате JSON или HTML/MD. Дальнейшие действия определяется оп заголовку ответа
// `Content-Type`:
// - `application/json` - ответ в формате JSON. Структура ответа соответствует `ActionResponse` и интерпретируется
// тем же способом что и ответ от GRPC.
// - `text/html` - ответ в формате HTML. Интерфейс отображает ответ в виде сообщения в IFrame
// - `text/markdown` - ответ в формате MD. Интерфейс отображает ответ в виде сообщения.
//
// Переменные `:var` заменяются на текуще значение в пользовательском интерфейсе
// Перечень переменных для подстановки:
// - :spaceId
// - :envId
// - :colId
// - :itemId
//
// Пример: `ui:///spaces/:spaceId/envs/:envId/cols/:colId` - будет выполнено действие в интерфейсе.
string action = 10100;
Target target = 10110; // как должен отображаться результат действия
string parent = 10120; // Идентификатор родительского действия (для отображения в меню)
string name = 10200; // Название действия для отображения в интерфейсе (пункт меню, кнопка).
string description = 10210; // Описание действия для отображения в интерфейсе
string icon = 10220; // Название иконки для отображения действия в интерфейсе
content.references.Reference image = 10230; // Изображение для отображения в действия в интерфейсе
repeated string groups = 10240; // Группы отображения действия в интерфейсе
Kind kind = 10300; // Указывает на что направлено действие
Kind kind = 10300; // Указывает область действия (где отображается действие)
repeated string classes = 10310; // Классы данных к которым применимо действие (название коллекций или специальных групп в рамках которых данное действие применимо)
// Для `CREATE` действуют следующие правила:
// - Для создание записей в коллекции применимы действия которые содержат в classes название коллекции
......@@ -209,6 +108,8 @@ message Action {
string params_collection = 10330;
ActionRequest request = 10400; // Параметры запроса (используется в случае `ActionResponse.next`)
// DEPRECATED: Используйте `action` вместо `navigation_route`
bool navigation_action = 10500; // Флаг указывающий что действие переносить пользователя в другую часть интерфейса, а не отправляет запрос на сервер
// navigation_route - Строка шаблон для перехода в интерфейсе
......@@ -222,5 +123,48 @@ message Action {
// - :colId
// - :itemId
//
// DEPRECATED: Используйте `action`
string navigation_route = 10510;
// Параметр указывающий что действие выполняется автоматически
// Если указано, то действие выполняется автоматически каждый раз при загрузке приложения
bool autorun = 10520;
// Параметр указывающий что действие требует подтверждения пользователя
// Перед выполнением действия пользователю отображается информация о действии и кнопки подтверждения/отмены
bool confirm = 10530;
enum View {
DEFAULT_VIEW = 0; // Отображать в интерфейсе по умолчанию
HIDDEN_VIEW = 1; // Не отображать в интерфейсе
MAIN_MENU_VIEW = 2; // Отображать в главном меню
MAIN_MENU_BOTTOM_VIEW = 3; // Отображать в главном меню внизу
}
View view = 10540; // Отображение действия в интерфейсе
int32 order = 10550; // Порядок отображения действия в интерфейсе (Для пунктов меню)
}
// ActionRequest - запрос на выполнение действия к расширению (или менеджеру расширений)
message ActionRequest {
string extension = 1000;
string action = 10100;
string space_id = 10500;
string env_id = 10510;
string collection_id = 10520;
string item_id = 10530;
repeated string item_ids = 10540;
// Поля к которым применимо действие. В случае если действие выполняется из списка записей, содержит перечень
// полей которые пользователь выбрал для отображения в интерфейсе.
repeated string fields = 10550;
map<string,string> metadata = 11000;
// Ссылки на записи используемые для выполнения действия (назначение ссылок зависит от действия и расширения)
repeated content.references.Reference refs = 11010;
// Ссылка на документ с параметрами выполнения Action.
// Чтобы при выполнении действия открывалась форма параметров, необходимо указать `Action.params_collection`
content.references.Reference params = 11020;
}
/**
# Расширения (Extensions)
Расширения представляют собой отдельные сервисы предоставляющие дополнительные возможности для пользователей. Сервис
может предоставлять несколько расширений одновременно.
Для координации взаимодействия используется сервис менеджер расширений (Extension Manager). Для предоставления своих функций в систему сервис должен
зарегистрироваться на контроллере.
*/
syntax = "proto3";
option go_package = "git.perx.ru/perxis/perxis-go/proto/extensions;extensions";
package extensions;
import "references/references.proto";
import "common/operation.proto";
import "extensions/extension.proto";
// ExtensionService - API расширения
// Сервис должен реализовывать методы `common.OperationService` для работы операциями.
service ExtensionService {
// Install выполняет установку указанных расширений. Если
// расширение уже установлены выполняет процесс переустановки. Возвращает longtime операцию
rpc Install(InstallRequest) returns (common.Operation) {}
// Uninstall выполняет удаление указанных расширений.
rpc Uninstall(UninstallRequest) returns (common.Operation) {}
// Check выполняет проверку установки для расширения. При этом расширение проверяет наличие необходимых данных в
// пространстве или наличие новой версии расширения и сообщает об этом. Никаких действий с данными пространства не
// производится.
rpc Check(CheckRequest) returns (common.Operation) {}
// Пользовательские Действия (Actions)
//
// Пользовательские действия позволяют расширить функционал пользовательского интерфейса путем
// добавления в интерфейс элементов взаимодействуя с которыми пользователь может вызывать реакцию на
// сервере или переход в интерфейсе.
//
// Пользовательские действия добавляются при установке расширений в системную коллекции `System/Actions`.
// Коллекция создается автоматически менеджером расширений. При установке так же отображается меню `Действия`
// доступное для всех пользователей.
//
// Примеры пользовательских действий:
// - "Собрать сайт" - добавляется Perxis.Web для сборки сайта, доступна пользователю через меню,
// параметры space_id, env_id. При вызове выполняется запрос на сервер ProcessAction.
// - "Посмотреть задачи" - добавляется Tasks для перехода на коллекцию задач. Отображается в меню,
// параметры space_id, env_id.
//
// Приложения так же могут использовать действия для вызова обработки в других приложениях при
// необходимости.
rpc Action(ActionRequest) returns(ActionResponse) {} // Выполнить указанное действие
}
// InstallRequest - запрос на установку расширений
message InstallRequest {
repeated string extensions = 10000; // Список расширений для установки
string space_id = 10010; // Пространство для установки расширений
string env_id = 10020; // Идентификатор окружения для установки
bool force = 10100; // Устанавливать расширения вне зависимости от возможных ошибок
}
// UninstallRequest - запрос на удаление расширений
message UninstallRequest {
repeated string extensions = 10000; // Список расширений для удаления
string space_id = 10010; // Пространство для удаления расширений
string env_id = 10020; // Идентификатор окружения для установки (по умолчанию master)
bool remove = 10100; // Удалить сделанные расширением изменения в пространстве, если возможно
bool force = 10200; // Удалять расширения вне зависимости от возможных ошибок, без учета зависимостей
}
// CheckRequest - запрос на проверку статуса установки расширений
message CheckRequest {
repeated string extensions = 10000; // Список расширений для проверки
string space_id = 10010; // Пространство
string env_id = 10020; // Идентификатор окружения (по умолчанию master)
}
message ActionResponse {
enum State {
DONE = 0; // Запрос завершен
ERROR = 1; // Возникла ошибка
PENDING = 2; // Запрос ожидает выполнения
IN_PROGRESS = 3; // Запрос выполняется
PARAMETERS_REQUIRED = 4; // Требуются дополнительные данные для выполнения запроса
}
enum Format {
PLAIN = 0;
HTML = 1;
MARKDOWN = 2;
}
State state = 10000; // Состояние расширение
Target target = 10010; // Как открывать результат выполнения действия в пользовательском интерфейсе (переопределяет значение в Action)
Format format = 10050; // Формат полей msg и error
string msg = 10100; // Сообщение о выполнении действия
string title = 10110; // Текст для отображения в интерфейсе
string image = 10140; // Изображение для отображения в интерфейсе (шапке окна)
string error = 10200; // Сообщение в случае ошибки (дополнительно к msg)
repeated Action next = 10300; // Следующие возможные действия. Интерфейс отображает как варианты дальнейших действий пользователя
map<string,string>metadata = 10400; // Метаданные запроса
repeated content.references.Reference refs = 10320; // Ссылки на записи (назначение ссылок зависит от действия и расширения)
}
......@@ -32,28 +32,67 @@ option go_package = "git.perx.ru/perxis/perxis-go/proto/extensions;extensions";
package extensions;
// ExtensionManager - менеджер расширений. Должен реализовывать так же сервис Extension
service ExtensionManager {
service ExtensionManagerService {
// ## Регистрация расширений
//
// Регистрация\Дерегистрация происходить через сервис менеджера расширений (Extension Manager). В процессе регистрации сервис сообщает
// Регистрация\Дерегистрация происходит через сервис менеджера расширений (Extension Manager). В процессе регистрации сервис сообщает
// о поддерживаемых сервисом действиях (Actions) и версии сервиса и зависимостях:
// 1. Действия (Actions) - перечень действия которые обрабатываются сервисом. Включает в себя как системные действия,
// так и пользовательские, которые могут быть использованы в интерфейсе;
// ~~1. Действия (Actions) - перечень действия которые обрабатываются сервисом. Включает в себя как системные действия,
// так и пользовательские, которые могут быть использованы в интерфейсе;~~
// 2. Имя сервиса/расширения - название сервиса внутри системы;
// 3. Версия сервиса - сервис сообщает текущую версию сервиса. Контроллер сообщает пользователю о возможности обновления
// расширения при смене версии;
// 4. Описание версии - содержит информацию об изменениях в последних версиях расширения;
// 5. Зависимости - перечень расширений которые необходимы сервису для функционирования. При установке сервиса
// все расширения от которых он зависит, будут так же установлены.
// все расширения, от которых он зависит, будут также установлены.
rpc RegisterExtensions(RegisterExtensionsRequest) returns (RegisterExtensionsResponse) {}
rpc UnregisterExtensions(UnregisterExtensionsRequest) returns (UnregisterExtensionsResponse) {}
// Получить список зарегистрированных сервисов
rpc ListExtensions(ListExtensionsRequest) returns (ListExtensionsResponse) {} // Получить список сервисов
rpc ListRegisteredExtensions(ListRegisteredExtensionsRequest) returns (ListRegisteredExtensionsResponse) {} // Получить список сервисов
// ListExtensions - получить информацию о расширениях
rpc ListExtensions(ListExtensionsRequest) returns (ListExtensionsResponse) {} // Получить описание сервиса
}
// ListExtensionsRequest - запрос на получение статуса расширений в пространстве и окружении
message ListExtensionsRequest {
// Имя расширения (опционально), regexp. Фильтр по расширениям является приоритетным
// относительно остальных фильтров - если в `ListExtensionsRequest.extensions` передано
// [ a, b, c ], то в `ListExtensionsResponse.extensions` вернется три элемента с информацией о
// каждом из расширений
repeated string extensions = 1;
string space_id = 2; // Пространство имен расширения
string env_id = 3; // Идентификатор окружения
// Вернуть список расширений, которые находятся в одном из переданных состояний
// Если список состояний пустой, по умолчанию возвращаются расширения в любом состоянии,
// кроме NOT_INSTALLED
repeated State state = 4;
}
// ListExtensionsResponse - описание расширений. Результирующий список возвращается всегда
// в отсортированном виде:
// - Если `ListExtensionsRequest.extensions` пустой, то отсортированный по идентификатору расширения
// - Если `ListExtensionsRequest.extensions` заполнен, то возвращаются расширения в соответствующем
// запросу порядке
message ListExtensionsResponse {
message ExtensionInfo {
string extension = 10100; // Имя расширения
string title = 10110;
State state = 10120;
string msg = 10200; // Сообщение
string error = 10300; // Ошибка (state == ERROR)
bool not_found = 10350; // Расширение не найдено
bool update_available = 10500; // Доступно обновление
string installed_version = 10510; // Установленная версия расширения
string available_version = 10520; // Доступная версия расширения
}
repeated ExtensionInfo extensions = 1;
}
// ServiceDescription описание сервиса
// ExtensionDescriptor описание расширения (возвращается сервисом при регистрации)
message ExtensionDescriptor {
string extension = 10000; // Имя расширения
string title = 10010; // Название расширения
......@@ -78,30 +117,26 @@ message UnregisterExtensionsRequest {
message UnregisterExtensionsResponse {}
message ListExtensionsFilter {
message ListRegisteredExtensionsRequest {
repeated string extension = 1; // Список имен сервисов для получения результатов. Список может содержать регулярные выражения.
// repeated string action = 2; // Список действий обрабатываемых сервисами. Список может содержать регулярные выражения.
}
message ListExtensionsRequest {
ListExtensionsFilter filter = 1;
}
message ListExtensionsResponse {
message ListRegisteredExtensionsResponse {
repeated ExtensionDescriptor extensions = 1;
}
// Описание коллекций
// space_extensions (Пространство/Расширения)
message SpaceExtensions {
enum State {
PENDING = 0;
NOT_INSTALLED = 0;
INSTALLED = 1;
IN_PROGRESS = 2;
FAIL = 3;
PENDING = 4;
}
message SpaceExtensions {
string extension = 10000;
string title = 10010;
string version = 10100;
......
......@@ -10,6 +10,7 @@ syntax = "proto3";
import "google/protobuf/empty.proto";
import "common/common.proto";
import "common/error.proto";
import "google/protobuf/timestamp.proto";
import "google/protobuf/struct.proto";
......@@ -66,6 +67,7 @@ message Item {
google.protobuf.Struct data = 11;
map<string, google.protobuf.Struct> translations = 12;
string revision_id = 13;
string revision_description = 14;
string locale = 18;
bool deleted = 19;
bool hidden = 20;
......
......@@ -24,8 +24,37 @@ message GetResponse {
repeated Reference notfound = 2;
}
// References принимает список ссылок на записи и возвращает два списка:
// список найденных записей и не найденных ссылок
// PublishRequest запрос на публикацию записей по ссылкам
message PublishRequest {
string space_id = 1; // Пространство публикации
string env_id = 2; // Окружение публикации
repeated Reference references = 3; // Список ссылок на записи для публикации
bool recursive = 4; // Рекурсивно публиковать все ссылки на найденные записи
bool force = 5; // Принудительно публиковать записи, даже если они содержат не опубликованные ссылки
}
// PublishResponse ответ на запрос публикации записей
message PublishResponse {
repeated Reference published = 2; // Список опубликованных записей
repeated Reference notfound = 3; // Список не найденных записей
repeated Reference unpublished = 4; // Список не опубликованных записей, требующих публикации
}
// References сервис предназначен для работы со ссылками на записи
service References {
// Get возвращает список записей по ссылкам
rpc Get(GetRequest) returns(GetResponse) {}
// Publish принимает список ссылок на записи и публикует их с учетом вложенных ссылок.
//
// - В случае если флаг `recursive` установлен в true, то будут рекурсивно опубликованы
// все записи на которые ссылаются найденные записи.
// - Если флаг `recursive` установлен в false, то будут опубликованы записи
// только из списка `references` в случае если они не содержат не опубликованных
// ссылок. В противном случае возвращается список не опубликованных записей `unpublished`
// которые требуют публикации. Список `published` при этом будет пустым. В случае если флаг
// `force` установлен в true, то записи будут опубликованы даже если они содержат
// не опубликованные ссылки.
rpc Publish(PublishRequest) returns(PublishResponse) {}
}