diff --git a/proto/references/references.proto b/proto/references/references.proto index e8ef011f881d9f77f13da7f29ee63a07c3d26a87..d84be735ba0eea3e4abbf979e3fc8976d0580e97 100644 --- a/proto/references/references.proto +++ b/proto/references/references.proto @@ -1,16 +1,33 @@ syntax = "proto3"; import "items/items.proto"; +import "google/protobuf/empty.proto"; +import "google/protobuf/timestamp.proto"; +import "google/protobuf/duration.proto"; option go_package = "git.perx.ru/perxis/perxis-go/proto/references;references"; package content.references; +// Reference - ссылка РЅР° запись message Reference { - string id = 1; - string collection_id = 2; - bool disabled = 3; + string id = 1; // ID записи + string collection_id = 2; // ID коллекции + bool disabled = 3; // Если true, то ссылка игнорируется + string space_id = 4; // ID пространства, РІ котором находится запись (опционально, если РЅРµ указано, то текущее пространство) + string env_id = 5; // ID окружения, РІ котором находится запись (опционально, если РЅРµ указано, то текущее окружение) + items.Item item = 6; // Запись, РЅР° которую ссылается ссылка +} + +// Relation - СЃРІСЏР·СЊ между РґРІСѓРјСЏ объектами указанными РІ ссылках +message Relation { + Reference to = 1; // Ссылка РЅР° объект, РЅР° который указывает СЃРІСЏР·СЊ + Reference from = 2; // Ссылка РЅР° объект, РѕС‚ которого РёСЃС…РѕРґРёС‚ СЃРІСЏР·СЊ + string type = 3; // РўРёРї СЃРІСЏР·Рё + // int32 weight = 4; // Вес СЃРІСЏР·Рё + // uint32 epoch = 5; // Рспользуется РІ процессе перестроения связей + // bool bidirectional = 6; // Если true, то СЃРІСЏР·СЊ двунаправленная } message GetRequest { @@ -19,13 +36,111 @@ message GetRequest { repeated Reference references = 3; } + +// GetRespone принимает СЃРїРёСЃРѕРє ссылок РЅР° записи Рё возвращает РґРІР° СЃРїРёСЃРєР°: +// СЃРїРёСЃРѕРє найденных записей Рё РЅРµ найденных ссылок message GetResponse { repeated items.Item items = 1; repeated Reference notfound = 2; } -// References принимает СЃРїРёСЃРѕРє ссылок РЅР° записи Рё возвращает РґРІР° СЃРїРёСЃРєР°: -// СЃРїРёСЃРѕРє найденных записей Рё РЅРµ найденных ссылок +// SetRelationRequest принимает РґРІРµ ссылки Рё тип СЃРІСЏР·Рё +message SetRelationsRequest { + repeated Relation relation = 1; + bool skip_verify = 2; // Если true, то РЅРµ проверять существование записей +} + +// SetRelationsResponse возвращает количество установленных связей Рё СЃРїРёСЃРѕРє РЅРµ установленных связей +message SetRelationsResponse { + int32 count = 1; // Количество установленных связей + repeated Relation notfound = 2; // РЎРїРёСЃРѕРє РЅРµ установленных связей +} + +// RelationsRequest принимает параметры для РїРѕРёСЃРєР° связей +message GetRelationsRequest { + Reference to = 1; // Если указано, то возвращать только СЃРІСЏР·Рё РЅР° указанную запись + Reference from = 2; // Если указано, то возвращать только СЃРІСЏР·Рё РѕС‚ указанной записи + repeated string type = 3; // Если указано, то возвращать только СЃРІСЏР·Рё СЃ указанными типами + bool deref = 6; // Если true, то возвращать записи, РЅР° которые указывают ссылки + bool total = 7; // Если true, то возвращать количество связей + int32 limit = 10; // Если указано, то возвращать только указанное количество записей (РїРѕ умолчанию 10) + int32 offset = 11; // Если указано, то возвращать записи начиная СЃ указанного смещения +} + +// GetRelationsResponse возвращает СЃРїРёСЃРѕРє связей +message GetRelationsResponse { + repeated Relation relations = 1; // РЎРїРёСЃРѕРє связей + int32 count = 2; // Возвращается количество связей + int32 limit = 10; // Какое количество записей было запрошено + int32 offset = 11; // Какое смещение было запрошено + int32 total = 12; // Если запрошено, то возвращается количество связей +} + +// RemoveRelationRequest принимает РґРІРµ ссылки Рё тип СЃРІСЏР·Рё +message RemoveRelationsRequest { + Reference to = 1; // Если указано, то удаляются только СЃРІСЏР·Рё РЅР° указанную запись + Reference from = 2; // Если указано, то удаляются только СЃРІСЏР·Рё РѕС‚ указанной записи + repeated string type = 3; // Если указано, то удаляются только СЃРІСЏР·Рё СЃ указанными типами +} + +// RemoveRelationsResponse возвращает количество удаленных связей +message RemoveRelationsResponse { + int32 count = 1; // Количество удаленных связей +} + +// RebuildRelationsRequest принимает параметры для перестроения связей +message RebuildRelationsRequest { + string space_id = 1; // Если указано, то перестраиваются только СЃРІСЏР·Рё РІ указанном пространстве + string env_id = 2; // Если указано, то перестраиваются только СЃРІСЏР·Рё РІ указанном окружении + repeated string collection_ids = 3; // Если указано, то перестраиваются только СЃРІСЏР·Рё РІ указанных коллекциях +} + +// RebuildRelationsResponse возвращает токен, РїРѕ которому РјРѕР¶РЅРѕ получить статус перестроения связей +// токен действует 1 час +message RebuildRelationsResponse { + string token = 1; // Токен, РїРѕ которому РјРѕР¶РЅРѕ получить статус перестроения связей +} + +// RebuildRelationsStatusRequest принимает токен, РїРѕ которому РјРѕР¶РЅРѕ получить статус перестроения связей +message RebuildRelationsStatusRequest { + string token = 1; // Токен, РїРѕ которому РјРѕР¶РЅРѕ получить статус перестроения связей +} + +// RebuildRelationsStatusResponse возвращает статус перестроения связей +message RebuildRelationsStatusResponse { + bool done = 1; // Если true, то перестроение завершено + int32 relations_count = 2; // Количество связей, которые СѓР¶Рµ перестроены + int32 items_count = 3; // Количество записей, которые СѓР¶Рµ обработаны + google.protobuf.Timestamp started_at = 4; // Время начала перестроения + google.protobuf.Timestamp finished_at = 5; // Время окончания перестроения + google.protobuf.Duration duration = 6; // Продолжительность перестроения +} + +// CancelRebuildRelationsRequest принимает токен, РїРѕ которому РјРѕР¶РЅРѕ отменить перестроение связей +message CancelRebuildRelationsRequest { + string token = 1; // Токен, РїРѕ которому РјРѕР¶РЅРѕ отменить перестроение связей +} + service References { + // Возвращает СЃРїРёСЃРѕРє записей РїРѕ ссылкам rpc Get(GetRequest) returns(GetResponse) {} + + // Устанавливает СЃРІСЏР·СЊ между РґРІСѓРјСЏ записями + rpc SetRelations(SetRelationsRequest) returns(SetRelationsResponse) {} + + // Возвращает СЃРїРёСЃРѕРє связей + rpc GetRelations(GetRelationsRequest) returns(GetRelationsResponse) {} + + // Удаляет СЃРІСЏР·Рё + rpc RemoveRelations(RemoveRelationsRequest) returns(RemoveRelationsResponse) {} + + // Перестраивает СЃРІСЏР·Рё + // Может быть долгим, поэтому выполняется асинхронно, возвращает пустой ответ + rpc RebuildRelations(RebuildRelationsRequest) returns(RebuildRelationsResponse) {} + + // Возвращает статус перестроения связей + rpc RebuildRelationsStatus(RebuildRelationsStatusRequest) returns(RebuildRelationsResponse) {} + + // Отменяет перестроение связей + rpc CancelRebuildRelations(CancelRebuildRelationsRequest) returns(google.protobuf.Empty) {} }