diff --git a/proto/common/operation.proto b/proto/common/operation.proto new file mode 100644 index 0000000000000000000000000000000000000000..d77171ae99b45592065af7b9b2d6e016190ce65a --- /dev/null +++ b/proto/common/operation.proto @@ -0,0 +1,42 @@ +syntax = "proto3"; + +package common; + +import "google/protobuf/timestamp.proto"; +import "google/protobuf/any.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; + + // Результат выполнения операции РІ случае ошибки + string error = 10; + } +} diff --git a/proto/common/operation_service.proto b/proto/common/operation_service.proto new file mode 100644 index 0000000000000000000000000000000000000000..ca53cd8c5bb860fcf22c31659c543dc3537f6217 --- /dev/null +++ b/proto/common/operation_service.proto @@ -0,0 +1,24 @@ +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]; +} \ No newline at end of file diff --git a/proto/common/validation.proto b/proto/common/validation.proto new file mode 100644 index 0000000000000000000000000000000000000000..f4f5c974339a9c9ae08f59353bb0963358d0ce62 --- /dev/null +++ b/proto/common/validation.proto @@ -0,0 +1,28 @@ +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 diff --git a/proto/extensions/extension.proto b/proto/extensions/extension.proto index 59a43250bc7461959b08b25b0892547a803b0347..98840b481beea9de9e545e7109eadcc7c27c77cb 100644 --- a/proto/extensions/extension.proto +++ b/proto/extensions/extension.proto @@ -16,60 +16,12 @@ 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 { +message Extension { enum State { - OK = 0; // Запрос завершен - ERROR = 1; // Возникла ошибка - PENDING = 2; // Запрос ожидает выполнения - IN_PROGRESS = 3; // Запрос выполняется + OK = 0; // Текущее состояние расширения без ошибок + ERROR = 1; // Возникла ошибка РїСЂРё выполнении запроса + PENDING = 2; // Ожидает обработки (РІ очереди) + IN_PROGRESS = 3; // Запрос СѓР¶Рµ выполняется PARAMETERS_REQUIRED= 4; // Требуются дополнительные данные для выполнения запроса } @@ -77,69 +29,12 @@ message ExtensionRequestResult { 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; // РЎРїРёСЃРѕРє состояний расширений после удаления + bool installed = 10400; // Расширение установлено + bool update_available = 10500; // Доступно обновление + string installed_version = 10510; // Установленная версия расширения + string available_version = 10520; // Доступная версия расширения } -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; -} // Target - определяет как открывать результат выполнения действия РІ пользовательском интерфейсе enum Target { @@ -153,33 +48,6 @@ enum Target { NONE = 100; // РќРµ отображать результат } -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; // Ссылки РЅР° записи (назначение ссылок зависит РѕС‚ действия Рё расширения) -} - /** Action описывает как коллекцию РІ системе СЃ предуставновленными действиями, так Рё возможные дальнейшие действия после @@ -287,4 +155,28 @@ message Action { // Параметр указывающий что действие требует подтверждения пользователя // Перед выполнением действия пользователю отображается информация Рѕ действии Рё РєРЅРѕРїРєРё подтверждения/отмены bool confirm = 10530; +} + +// 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; } \ No newline at end of file diff --git a/proto/extensions/extension_service.proto b/proto/extensions/extension_service.proto new file mode 100644 index 0000000000000000000000000000000000000000..9d2893fbca22f06390d6e734d5c4f350152711d3 --- /dev/null +++ b/proto/extensions/extension_service.proto @@ -0,0 +1,118 @@ +/** +# Расширения (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; // Рдентификатор окружения для установки (РїРѕ умолчанию master) + bool force = 10100; // Устанавливать расширения РІРЅРµ зависимости РѕС‚ возможных ошибок + bool update = 10200; // Установить обновления расширений +} + +// ExtensionList - возвращает СЃРїРёСЃРѕРє состояний расширений РІ результате выполнения операции `common.Operation` +// (СЃРј. `common.OperationService`) +// Р’ методах Install, Uninstall, Check возвращается СЃРїРёСЃРѕРє состояний расширений РІ результате выполнения операции +message ExtensionList { + repeated Extension results = 10000; // РЎРїРёСЃРѕРє состояний расширений +} + +// 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; // Ссылки РЅР° записи (назначение ссылок зависит РѕС‚ действия Рё расширения) +}