From 22347c28db32b04090954b0aae320e9c073d2261 Mon Sep 17 00:00:00 2001
From: Pavel Antonov <antonov@perx.ru>
Date: Fri, 7 Jul 2023 14:20:45 +0400
Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8?=
 =?UTF-8?q?=D0=B5=20=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=BE=D0=B2=20?=
 =?UTF-8?q?=D0=B8=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9=D1=81?=
 =?UTF-8?q?=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE?=
 =?UTF-8?q?=D1=82=D1=8B=20=D1=81=D0=BE=20=D1=81=D0=B2=D1=8F=D0=B7=D1=8F?=
 =?UTF-8?q?=D0=BC=D0=B8=20=D0=B2=20Perxis?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 proto/references/references.proto | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/proto/references/references.proto b/proto/references/references.proto
index 589d4fd..692e25d 100644
--- a/proto/references/references.proto
+++ b/proto/references/references.proto
@@ -9,8 +9,9 @@ option go_package = "git.perx.ru/perxis/perxis-go/proto/references;references";
 
 package content.references;
 
-
-// Reference - ссылка на запись
+// Reference - ссылка на объект.
+// Ссылка может быть на запись в текущем пространстве, окружении или в другом пространстве. Если не указано,
+// то считается, что ссылка на запись в текущем пространстве и окружении объекта, в котором находится ссылка.
 message Reference {
   string id = 1; // ID записи
   string collection_id = 2; // ID коллекции
@@ -18,13 +19,20 @@ message Reference {
   string space_id = 4; // ID пространства, в котором находится запись (опционально, если не указано, то текущее пространство)
   string env_id = 5; // ID окружения, в котором находится запись (опционально, если не указано, то текущее окружение)
   items.Item item = 6; // Запись, на которую ссылается ссылка
+  string error = 7; // Ошибка, если запись не найдена (возвращается вместо записи)
 }
 
-// Relation - связь между двумя объектами указанными в ссылках
+// Relation - связь между двумя объектами указанными в ссылках.
+// Тип связи может быть любым, но есть зарезервированные типы, которые используются в системе:
+// - "ref" - используется для связей установленных через поля ссылок в объектах
+// - "tag" - используется для связей установленных через поля тегов в объектах, используется в таксономии
+// Расширения могут использовать свои типы связей для своих целей.
 message Relation {
   Reference to = 1; // Ссылка на объект, на который указывает связь
   Reference from = 2; // Ссылка на объект, от которого исходит связь
   string type = 3; // РўРёРї СЃРІСЏР·Рё
+  bool weak = 4; // Если true, то связь слабая и позволяет удалять записи, на которые она указывает
+
   // int32 weight = 4; // Вес связи
   // uint32 epoch = 5; // Используется в процессе перестроения связей
   // bool bidirectional = 6; // Если true, то связь двунаправленная
@@ -44,9 +52,9 @@ message GetResponse {
   repeated Reference notfound = 2;
 }
 
-// SetRelationRequest принимает массив отношений для установки
+// SetRelationRequest принимает массив связей для установки
 message SetRelationsRequest {
-  repeated Relation relation = 1;
+  repeated Relation relation = 1; // Список связей для установки
   bool skip_verify = 2; // Если true, то не проверять существование записей
 }
 
@@ -93,6 +101,7 @@ message RebuildRelationsRequest {
   string space_id = 1; // Если указано, то перестраиваются только связи в указанном пространстве
   string env_id = 2; // Если указано, то перестраиваются только связи в указанном окружении
   repeated string collection_ids = 3; // Если указано, то перестраиваются только связи в указанных коллекциях
+  repeated Reference from = 4; // Если указано, то перестраиваются только связи от указанной записи
 }
 
 // RebuildRelationsResponse возвращает токен, по которому можно получить статус перестроения связей
@@ -135,7 +144,7 @@ service References  {
   rpc RemoveRelations(RemoveRelationsRequest) returns(RemoveRelationsResponse) {}
 
   // Перестраивает связи
-  // Может быть долгим, поэтому выполняется асинхронно, возвращает пустой ответ
+  // Может быть долгим, поэтому возвращает токен, по которому можно получить статус перестроения связей
   rpc RebuildRelations(RebuildRelationsRequest) returns(RebuildRelationsResponse) {}
 
   // Возвращает статус перестроения связей
-- 
GitLab