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..60b1b8b9b537e8078f77390c2f928eb222fb0280 --- /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]; +} 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 456e90dab5b48945572d3be502bef9278c04d046..e6f694cdbc475341926d6c528fb6f6c59fa60520 100644 --- a/proto/extensions/extension.proto +++ b/proto/extensions/extension.proto @@ -16,131 +16,6 @@ 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; -} - // Target - определяет как открывать результат выполнения действия РІ пользовательском интерфейсе enum Target { DEFAULT = 0; // РџРѕ умолчанию (если нет РґСЂСѓРіРёС… условий, то MODAL) @@ -153,33 +28,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 описывает как коллекцию РІ системе СЃ предуставновленными действиями, так Рё возможные дальнейшие действия после @@ -261,7 +109,7 @@ message Action { ActionRequest request = 10400; // Параметры запроса (используется РІ случае `ActionResponse.next`) - // DEPRECATED: Рспользуйте `action_url` вместо `navigation_route` + // DEPRECATED: Рспользуйте `action` вместо `navigation_route` bool navigation_action = 10500; // Флаг указывающий что действие переносить пользователя РІ РґСЂСѓРіСѓСЋ часть интерфейса, Р° РЅРµ отправляет запрос РЅР° сервер // navigation_route - Строка шаблон для перехода РІ интерфейсе @@ -275,7 +123,7 @@ message Action { // - :colId // - :itemId // - // DEPRECATED: Рспользуйте `action_type == "NAVIGATION"` + // DEPRECATED: Рспользуйте `action` string navigation_route = 10510; // Параметр указывающий что действие выполняется автоматически @@ -295,4 +143,28 @@ message Action { 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; } \ 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..a70db228f01e53bd01482d434ed719efb3220bf6 --- /dev/null +++ b/proto/extensions/extension_service.proto @@ -0,0 +1,108 @@ +/** +# Расширения (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; // Ссылки РЅР° записи (назначение ссылок зависит РѕС‚ действия Рё расширения) +} diff --git a/proto/extensions/manager.proto b/proto/extensions/manager_service.proto similarity index 75% rename from proto/extensions/manager.proto rename to proto/extensions/manager_service.proto index 0def40164a520bc46acaf6440608a803944bd937..a85bde685fc633051564d36dcace24088a683e1f 100644 --- a/proto/extensions/manager.proto +++ b/proto/extensions/manager_service.proto @@ -32,28 +32,56 @@ 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) {} // Получить СЃРїРёСЃРѕРє сервисов + + // GetInstalledExtensions - получить статус расширения + rpc GetInstalledExtensions(GetInstalledExtensionsRequest) returns (GetInstalledExtensionsResponse) {} // Получить описание сервиса +} + +// GetInstalledExtensionsRequest - запрос РЅР° получение статуса расширений РІ пространстве Рё окружении. +// Если СЃРїРёСЃРѕРє расширений РІ запросе РЅРµ передан, возвращаются РІСЃРµ установленные расширения +message GetInstalledExtensionsRequest { + repeated string extensions = 1; // РРјСЏ расширения + string space_id = 2; // Пространство имен расширения + string env_id = 3; // Рдентификатор окружения +} + +// GetExtensionResponse - описание расширения +message GetInstalledExtensionsResponse { + message Status { + string extension = 10100; // РРјСЏ расширения + string title = 10110; + State state = 10120; + string msg = 10200; // Сообщение + string error = 10300; // Ошибка (state == ERROR) + bool not_found = 10350; // Расширение РЅРµ найдено + bool installed = 10400; // Расширение установлено + bool update_available = 10500; // Доступно обновление + string installed_version = 10510; // Установленная версия расширения + string available_version = 10520; // Доступная версия расширения + } + repeated Status status = 1; } -// ServiceDescription описание сервиса +// ExtensionDescriptor описание расширения (возвращается сервисом РїСЂРё регистрации) message ExtensionDescriptor { string extension = 10000; // РРјСЏ расширения string title = 10010; // Название расширения @@ -92,16 +120,17 @@ message ListExtensionsResponse { } // Описание коллекций - // space_extensions (Пространство/Расширения) +enum State { + UNKNOWN = 0; + INSTALLED = 1; + IN_PROGRESS = 2; + FAIL = 3; + PENDING = 4; +} + message SpaceExtensions { - enum State { - PENDING = 0; - INSTALLED = 1; - IN_PROGRESS = 2; - FAIL = 3; - } string extension = 10000; string title = 10010; string version = 10100; @@ -109,4 +138,4 @@ message SpaceExtensions { State state = 10300; string status_error = 10400; // Сообщение Рє ошибке string status_msg = 10500; // Сообщение Рє статусу -} \ No newline at end of file +}