From e4be4f07e9d3528a61c7905934c7ff443eb5a134 Mon Sep 17 00:00:00 2001
From: Pavel Antonov <antonov@perx.ru>
Date: Thu, 13 Jun 2024 08:20:46 +0000
Subject: [PATCH] =?UTF-8?q?feat(core):=20=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2?=
 =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20Items=20API=20Proto=20=D0=B4?=
 =?UTF-8?q?=D0=BB=D1=8F=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA?=
 =?UTF-8?q?=D0=B8=20=D0=BB=D0=BE=D0=BA=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86?=
 =?UTF-8?q?=D0=B8=D0=B8=20=D0=B8=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=BE?=
 =?UTF-8?q?=D0=B4=D0=BE=D0=B2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Close #PRXS-2647
---
 proto/items/items.proto | 33 +++++++++++++++++++++++++++++----
 1 file changed, 29 insertions(+), 4 deletions(-)

diff --git a/proto/items/items.proto b/proto/items/items.proto
index 80d4f21..87228d2 100644
--- a/proto/items/items.proto
+++ b/proto/items/items.proto
@@ -65,15 +65,27 @@ message Item {
   string updated_by = 9;                       // id пользователя обновившего текущую ревизию
   google.protobuf.Timestamp updated_at = 10;     // дата обновления текущей ревизии
   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;
   bool template = 21;
   Permissions permissions = 22;
   double search_score = 23;  // релеватность элемента при полнотекстовом поиске
+
+  // string locale = 18; // DEPRECATED: используется locale_id
+
+  // При создании или обновлении идентификатор локали в котором создается запись, опционально.
+  // Если указан, то создается перевод для указанного языка, поле translations игнорируется
+  string locale_id = 100; // идентификатор локали полученной записи
+
+  // Позволяет одновременно установить/получить несколько переводов и производить манипуляции с переводами
+  // Ключами является идентификатор локали, значениями - данные переводы
+  map<string, google.protobuf.Struct> translations = 12;
+
+  // список идентификаторов локалей для которых есть переводы
+  // соотвествует ключам в translations
+  repeated string translations_ids = 101;
 }
 
 /**
@@ -131,6 +143,8 @@ message FindOptions {
   bool regular = 4;
   bool hidden = 5;
   bool templates = 6;
+  string locale_id = 7; // Язык перевода который будет использоваться. Если не указан, то возвращаются данные для языка по умолчанию
+  repeated string translations_ids = 8; // Список идентификаторов переводов/локалей, которых должны быть включены в результат
 }
 
 message UpdateOptions {
@@ -138,7 +152,8 @@ message UpdateOptions {
 }
 
 message GetPublishedOptions {
-  string locale_id = 1;
+  string locale_id = 7; // Язык перевода который будет использоваться. Если не указан, то возвращаются данные для языка по умолчанию
+  repeated string translations_ids = 8; // Список идентификаторов переводов/локалей, которых должны быть включены в результат
 }
 
 message DeleteOptions {
@@ -160,10 +175,12 @@ message UnpublishOptions {
 
 message FindPublishedOptions {
   common.FindOptions options = 2;
-  string locale_id = 3;
+  // string locale_id = 3; // язык для поиска переводов. Если не указан, то возвращаются данные для языка по умолчанию
   bool regular = 4;
   bool hidden = 5;
   bool templates = 6;
+  string locale_id = 7; // Язык перевода который будет использоваться. Если не указан, то возвращаются данные для языка по умолчанию
+  repeated string translations_ids = 8; // Список идентификаторов переводов/локалей, которых должны быть включены в результат
 }
 
 message FindArchivedOptions {
@@ -191,6 +208,7 @@ message  AggregateOptions {
 
 message  AggregatePublishedOptions {
   map<string, string> fields = 1;
+  // TODO: Каким образом будет организована работа с переводами и требуется ли она?
 }
 
 message CreateRequest {
@@ -210,12 +228,19 @@ message IntrospectResponse {
   repeated common.Error.BadRequest.FieldViolation validation_errors = 3;
 }
 
+message GetOptions {
+  string locale_id = 7; // Язык перевода который будет использоваться. Если не указан, то возвращаются данные для языка по умолчанию
+  repeated string translations_ids = 8; // Список идентификаторов переводов/локалей, которых должны быть включены в результат
+}
+
 message GetRequest {
   string space_id = 1;
   string env_id = 2;
   string collection_id = 3;
   string item_id = 4;
+  GetOptions options = 5;
 }
+
 message GetResponse {
   Item item = 1;
 }
-- 
GitLab