From 277439a9ae475d5366fac1b0bf448a125c3f035a Mon Sep 17 00:00:00 2001
From: Anton Sattarov <sattarov@perx.ru>
Date: Tue, 27 Dec 2022 16:05:20 +0300
Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?=
 =?UTF-8?q?=D0=B5=D0=BD=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80?=
 =?UTF-8?q?=20go=5Fpackage?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 proto/clients/clients.proto             |  2 +-
 proto/collaborators/collaborators.proto |  2 +-
 proto/collections/collections.proto     |  2 +-
 proto/common/common.proto               |  2 +-
 proto/delivery/delivery.proto           | 20 ++++++++-
 proto/environments/environments.proto   |  8 +++-
 proto/extensions/extension.proto        |  2 +-
 proto/extensions/manager.proto          |  2 +-
 proto/files/files.proto                 |  2 +-
 proto/images/images.proto               |  2 +-
 proto/invitations/invitations.proto     |  2 +-
 proto/items/items.proto                 | 57 ++++++++++++++++++++++++-
 proto/locales/locales.proto             |  2 +-
 proto/members/members.proto             |  2 +-
 proto/organizations/organizations.proto |  2 +-
 proto/references/references.proto       |  3 +-
 proto/roles/roles.proto                 |  2 +-
 proto/spaces/spaces.proto               |  2 +-
 proto/users/users.proto                 |  2 +-
 proto/versions/account/versions.proto   |  2 +-
 proto/versions/content/versions.proto   |  2 +-
 21 files changed, 101 insertions(+), 21 deletions(-)

diff --git a/proto/clients/clients.proto b/proto/clients/clients.proto
index c20c5d4..2720536 100644
--- a/proto/clients/clients.proto
+++ b/proto/clients/clients.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 import "google/protobuf/empty.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/clients;clients";
+option go_package = "git.perx.ru/perxis/perxis-go/clients;clients";
 
 package content.clients;
 
diff --git a/proto/collaborators/collaborators.proto b/proto/collaborators/collaborators.proto
index 263fc8b..8964249 100644
--- a/proto/collaborators/collaborators.proto
+++ b/proto/collaborators/collaborators.proto
@@ -3,7 +3,7 @@ syntax = "proto3";
 import "google/protobuf/empty.proto";
 import "common/common.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/collaborators;collaborators";
+option go_package = "git.perx.ru/perxis/perxis-go/collaborators;collaborators";
 
 package content.collaborators;
 
diff --git a/proto/collections/collections.proto b/proto/collections/collections.proto
index aafd070..e1ae9b1 100644
--- a/proto/collections/collections.proto
+++ b/proto/collections/collections.proto
@@ -4,7 +4,7 @@ import "google/protobuf/empty.proto";
 import "common/common.proto";
 import "google/protobuf/timestamp.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/collections;collections";
+option go_package = "git.perx.ru/perxis/perxis-go/collections;collections";
 
 package content.collections;
 
diff --git a/proto/common/common.proto b/proto/common/common.proto
index 60a918a..3097728 100644
--- a/proto/common/common.proto
+++ b/proto/common/common.proto
@@ -1,6 +1,6 @@
 syntax = "proto3";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/common;common";
+option go_package = "git.perx.ru/perxis/perxis-go/common;common";
 
 package common;
 
diff --git a/proto/delivery/delivery.proto b/proto/delivery/delivery.proto
index a3543e6..abfd148 100644
--- a/proto/delivery/delivery.proto
+++ b/proto/delivery/delivery.proto
@@ -4,8 +4,9 @@ import "locales/locales.proto";
 import "environments/environments.proto";
 import "collections/collections.proto";
 import "items/items.proto";
+import "google/protobuf/struct.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/delivery;delivery";
+option go_package = "git.perx.ru/perxis/perxis-go/delivery;delivery";
 
 package delivery;
 
@@ -74,6 +75,21 @@ message FindItemsResponse{
   int32 total = 2;
 }
 
+message  AggregateOptions {
+  map<string, string> fields = 1;
+}
+
+message AggregateRequest {
+  string space_id = 1;
+  string env_id = 2;
+  string collection_id = 3;
+  content.items.Filter filter = 4;
+  AggregateOptions options = 10;
+}
+message  AggregateResponse{
+  google.protobuf.Struct result = 1;
+}
+
 service Delivery  {
   rpc ListLocales(ListLocalesRequest) returns(ListLocalesResponse) {}
 
@@ -85,4 +101,6 @@ service Delivery  {
 
   rpc GetItem(GetItemRequest) returns(GetItemResponse) {}
   rpc FindItems(FindItemsRequest) returns(FindItemsResponse) {}
+
+  rpc Aggregate(AggregateRequest) returns(AggregateResponse) {}
 }
diff --git a/proto/environments/environments.proto b/proto/environments/environments.proto
index d12cacc..93a173b 100644
--- a/proto/environments/environments.proto
+++ b/proto/environments/environments.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 import "google/protobuf/empty.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/environments;environments";
+option go_package = "git.perx.ru/perxis/perxis-go/environments;environments";
 
 package content.environments;
 
@@ -74,6 +74,11 @@ message DeleteRequest {
   string env_id = 2;
 }
 
+message MigrateRequest {
+  string space_id = 1;
+  string env_id = 2;
+}
+
 service Environments {
   rpc Create(CreateRequest) returns(CreateResponse) {}
   rpc Get(GetRequest) returns(GetResponse) {}
@@ -82,4 +87,5 @@ service Environments {
   rpc SetAlias(SetAliasRequest) returns(google.protobuf.Empty) {}
   rpc RemoveAlias(RemoveAliasRequest) returns(google.protobuf.Empty) {}
   rpc Delete(DeleteRequest) returns(google.protobuf.Empty) {}
+  rpc Migrate(MigrateRequest) returns(google.protobuf.Empty) {}
 }
\ No newline at end of file
diff --git a/proto/extensions/extension.proto b/proto/extensions/extension.proto
index fa91d9e..4a2d57f 100644
--- a/proto/extensions/extension.proto
+++ b/proto/extensions/extension.proto
@@ -10,7 +10,7 @@
 */
 syntax = "proto3";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/extensions;extensions";
+option go_package = "git.perx.ru/perxis/perxis-go/extensions;extensions";
 
 package extensions;
 
diff --git a/proto/extensions/manager.proto b/proto/extensions/manager.proto
index 0def401..8b0e289 100644
--- a/proto/extensions/manager.proto
+++ b/proto/extensions/manager.proto
@@ -27,7 +27,7 @@
 */
 syntax = "proto3";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/extensions;extensions";
+option go_package = "git.perx.ru/perxis/perxis-go/extensions;extensions";
 
 package extensions;
 
diff --git a/proto/files/files.proto b/proto/files/files.proto
index ff3cf8c..4c00d49 100644
--- a/proto/files/files.proto
+++ b/proto/files/files.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 import "google/protobuf/empty.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/files;files";
+option go_package = "git.perx.ru/perxis/perxis-go/files;files";
 
 package files;
 
diff --git a/proto/images/images.proto b/proto/images/images.proto
index b58c473..f22da2a 100644
--- a/proto/images/images.proto
+++ b/proto/images/images.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 import "files/files.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/images;images";
+option go_package = "git.perx.ru/perxis/perxis-go/images;images";
 
 package images;
 
diff --git a/proto/invitations/invitations.proto b/proto/invitations/invitations.proto
index c7be5b0..539c189 100644
--- a/proto/invitations/invitations.proto
+++ b/proto/invitations/invitations.proto
@@ -4,7 +4,7 @@ import "google/protobuf/timestamp.proto";
 import "google/protobuf/empty.proto";
 import "google/protobuf/wrappers.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/invitations;invitations";
+option go_package = "git.perx.ru/perxis/perxis-go/invitations;invitations";
 
 package content.invitations;
 
diff --git a/proto/items/items.proto b/proto/items/items.proto
index 190eace..c02ab82 100644
--- a/proto/items/items.proto
+++ b/proto/items/items.proto
@@ -13,7 +13,7 @@ import "common/common.proto";
 import "google/protobuf/timestamp.proto";
 import "google/protobuf/struct.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/items;items";
+option go_package = "git.perx.ru/perxis/perxis-go/items;items";
 
 package content.items;
 
@@ -127,6 +127,25 @@ message ListRevisionsOptions {
   common.FindOptions options = 2;
 }
 
+// Fields - поля которые должны быть возвращены или вычислены в результате.
+// Ключ (string) - имя поля под которым будет добавляться результат.
+// Значение (string) - является выражением, вычисление которого сформирует результат
+// Функции для выражений (для поля F, типа T):
+// - distinct(F) - все значения поля, тип результат []T
+// - min(F) - минимальное значение поля, тип результат T
+// - max(F) - максимальное значение поля, тип результат T
+// - avg(F) - среднее значения поля, тип результат T
+// - sum(F) - сумма значений поля, тип результат T
+// - count() - число записей, тип результат int
+// Пример: {'average C': 'avg(a.b.c)'}
+message  AggregateOptions {
+  map<string, string> fields = 1;
+}
+
+message  AggregatePublishedOptions {
+  map<string, string> fields = 1;
+}
+
 message CreateRequest {
   Item item = 1;
   CreateOptions options = 2;
@@ -218,6 +237,31 @@ message FindPublishedResponse{
   int32 total = 2;
 }
 
+message AggregateRequest {
+  string space_id = 1;
+  string env_id = 2;
+  string collection_id = 3;
+  Filter filter = 4;
+  AggregateOptions options = 10;
+}
+/**
+ * Содержит в себе набор `название:значение`. Название соответствует переданному в AggregateOptions ключу.
+ */
+message  AggregateResponse{
+  google.protobuf.Struct result = 1;
+}
+
+message AggregatePublishedRequest {
+  string space_id = 1;
+  string env_id = 2;
+  string collection_id = 3;
+  Filter filter = 4;
+  AggregatePublishedOptions options = 10;
+}
+message  AggregatePublishedResponse{
+  google.protobuf.Struct result = 1;
+}
+
 message GetRevisionRequest {
   string space_id = 1;
   string env_id = 2;
@@ -295,6 +339,17 @@ service Items {
   rpc GetPublished(GetPublishedRequest) returns(GetPublishedResponse) {}
   rpc FindPublished(FindPublishedRequest) returns(FindPublishedResponse) {}
 
+  /**
+   * Расчет значений по существующим данным. Например, получение среднего значения поля
+   */
+  rpc Aggregate(AggregateRequest) returns(AggregateResponse) {}
+
+
+  /**
+   * Расчет значений по существующим **опубликованным** данным.
+   */
+  rpc AggregatePublished(AggregatePublishedRequest) returns(AggregatePublishedResponse) {}
+
   rpc GetRevision(GetRevisionRequest) returns(GetRevisionResponse) {}
   rpc ListRevisions(ListRevisionsRequest) returns(ListRevisionsResponse) {}
 
diff --git a/proto/locales/locales.proto b/proto/locales/locales.proto
index dd28974..7c38f42 100644
--- a/proto/locales/locales.proto
+++ b/proto/locales/locales.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 import "google/protobuf/empty.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/locales;locales";
+option go_package = "git.perx.ru/perxis/perxis-go/locales;locales";
 
 package content.locales;
 
diff --git a/proto/members/members.proto b/proto/members/members.proto
index 430691c..7e3fcd4 100644
--- a/proto/members/members.proto
+++ b/proto/members/members.proto
@@ -3,7 +3,7 @@ syntax = "proto3";
 import "google/protobuf/empty.proto";
 import "common/common.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/members;members";
+option go_package = "git.perx.ru/perxis/perxis-go/members;members";
 
 package account.members;
 
diff --git a/proto/organizations/organizations.proto b/proto/organizations/organizations.proto
index a8b0399..54f0472 100644
--- a/proto/organizations/organizations.proto
+++ b/proto/organizations/organizations.proto
@@ -3,7 +3,7 @@ syntax = "proto3";
 import "google/protobuf/empty.proto";
 import "common/common.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/organizations;organizations";
+option go_package = "git.perx.ru/perxis/perxis-go/organizations;organizations";
 
 package account.organizations;
 
diff --git a/proto/references/references.proto b/proto/references/references.proto
index a56d45f..2cf54e1 100644
--- a/proto/references/references.proto
+++ b/proto/references/references.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 import "items/items.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/references;references";
+option go_package = "git.perx.ru/perxis/perxis-go/references;references";
 
 package content.references;
 
@@ -10,6 +10,7 @@ package content.references;
 message Reference {
   string id = 1;
   string collection_id = 2;
+  bool disabled = 3;
 }
 
 message GetRequest {
diff --git a/proto/roles/roles.proto b/proto/roles/roles.proto
index 04ad46b..e680309 100644
--- a/proto/roles/roles.proto
+++ b/proto/roles/roles.proto
@@ -3,7 +3,7 @@ syntax = "proto3";
 import "google/protobuf/empty.proto";
 import "common/common.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/roles;roles";
+option go_package = "git.perx.ru/perxis/perxis-go/roles;roles";
 
 package content.roles;
 
diff --git a/proto/spaces/spaces.proto b/proto/spaces/spaces.proto
index 87cbef9..2dd63aa 100644
--- a/proto/spaces/spaces.proto
+++ b/proto/spaces/spaces.proto
@@ -1,6 +1,6 @@
 syntax = "proto3";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/spaces;spaces";
+option go_package = "git.perx.ru/perxis/perxis-go/spaces;spaces";
 
 package content.spaces;
 
diff --git a/proto/users/users.proto b/proto/users/users.proto
index 94b7543..283c97d 100644
--- a/proto/users/users.proto
+++ b/proto/users/users.proto
@@ -4,7 +4,7 @@ import "google/protobuf/empty.proto";
 import "google/protobuf/wrappers.proto";
 import "common/common.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/users;users";
+option go_package = "git.perx.ru/perxis/perxis-go/users;users";
 
 package account.users;
 
diff --git a/proto/versions/account/versions.proto b/proto/versions/account/versions.proto
index 1018795..bab5e9e 100644
--- a/proto/versions/account/versions.proto
+++ b/proto/versions/account/versions.proto
@@ -3,7 +3,7 @@ syntax = "proto3";
 import "google/protobuf/empty.proto";
 import "common/common.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/versions/account;account";
+option go_package = "git.perx.ru/perxis/perxis-go/versions/account;account";
 
 package account;
 
diff --git a/proto/versions/content/versions.proto b/proto/versions/content/versions.proto
index 012eeb1..a3a14d9 100644
--- a/proto/versions/content/versions.proto
+++ b/proto/versions/content/versions.proto
@@ -3,7 +3,7 @@ syntax = "proto3";
 import "google/protobuf/empty.proto";
 import "common/common.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/versions/content;content";
+option go_package = "git.perx.ru/perxis/perxis-go/versions/content;content";
 
 package content;
 
-- 
GitLab