From 2ac645027f9098a1a63cb8affb41f9a0b3069bd7 Mon Sep 17 00:00:00 2001
From: Alena Petraki <alena.petraki@gmail.com>
Date: Fri, 27 Oct 2023 13:35:34 +0300
Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B8=20=D0=BF=D0=BE=D0=BB=D1=83?=
 =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=B8=D0=B8=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA?=
 =?UTF-8?q?=D0=B0=20=D1=80=D0=B0=D1=81=D1=88=D0=B8=D1=80=D0=B5=D0=BD=D0=B8?=
 =?UTF-8?q?=D0=B9=20=D0=BF=D0=BE=D0=BB=D0=B5=20`Info.Extension`=20=D1=83?=
 =?UTF-8?q?=D1=81=D1=82=D0=B0=D0=BD=D0=B0=D0=B2=D0=BB=D0=B8=D0=B2=D0=B0?=
 =?UTF-8?q?=D0=B5=D1=82=D1=81=D1=8F=20=D0=B8=D0=B7=20=D0=B4=D0=B0=D0=BD?=
 =?UTF-8?q?=D0=BD=D1=8B=D1=85=20=D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D0=B8:=20?=
 =?UTF-8?q?=D0=BF=D1=83=D1=81=D1=82=D0=BE=D0=B5=20=D0=BF=D0=BE=D0=BB=D0=B5?=
 =?UTF-8?q?=20=D0=BE=D0=B7=D0=BD=D0=B0=D1=87=D0=B0=D0=B5=D1=82,=20=D1=87?=
 =?UTF-8?q?=D1=82=D0=BE=20=D0=BA=D0=BE=D0=BB=D0=BB=D0=B5=D0=BA=D1=86=D0=B8?=
 =?UTF-8?q?=D1=8F=20`space=5Fextensions`=20=D0=B5=D1=89=D0=B5=20=D0=BD?=
 =?UTF-8?q?=D0=B5=20=D0=B1=D1=8B=D0=BB=D0=B0=20=D0=BC=D0=B8=D0=B3=D1=80?=
 =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 perxis-proto                                |  2 +-
 pkg/extension/storage.go                    |  3 ++-
 proto/extensions/manager_service.pb.go      | 17 ++++++++++++++---
 proto/extensions/manager_service_grpc.pb.go |  4 ++--
 4 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/perxis-proto b/perxis-proto
index 606cf807..78539871 160000
--- a/perxis-proto
+++ b/perxis-proto
@@ -1 +1 @@
-Subproject commit 606cf8070bc9a930cadd5117bf49cc119ff3a16e
+Subproject commit 78539871cf2d9f6b187865c4855450143dec4e79
diff --git a/pkg/extension/storage.go b/pkg/extension/storage.go
index 73b20d26..0d8479c1 100644
--- a/pkg/extension/storage.go
+++ b/pkg/extension/storage.go
@@ -45,6 +45,7 @@ func infoFromItem(extension string, item *items.Item) *Info {
 
 	d := item.Data
 
+	id, _ := d["id"].(string) // чтобы при получении списка расширений было возможно понять, что коллекция `space_extensions` еще не была мигрирована (v0.0.19)
 	title, _ := d["title"].(string)
 	state, _ := d["extension_state"].(int64)
 	ver, _ := d["version"].(string)
@@ -52,7 +53,7 @@ func infoFromItem(extension string, item *items.Item) *Info {
 	errmsg, _ := d["status_error"].(string)
 
 	return &Info{
-		Extension:        extension,
+		Extension:        id,
 		Title:            title,
 		State:            State(state),
 		Msg:              msg,
diff --git a/proto/extensions/manager_service.pb.go b/proto/extensions/manager_service.pb.go
index 8f352f18..92434b60 100644
--- a/proto/extensions/manager_service.pb.go
+++ b/proto/extensions/manager_service.pb.go
@@ -108,10 +108,17 @@ type ListExtensionsRequest struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Extensions []string `protobuf:"bytes,1,rep,name=extensions,proto3" json:"extensions,omitempty"`          // Имя расширения (опционально), regexp
+	// Имя расширения (опционально), regexp. Фильтр по расширениям является приоритетным
+	// относительно остальных фильтров - если в `ListExtensionsRequest.extensions` передано
+	// [ a, b, c ], то в `ListExtensionsResponse.extensions` вернется три элемента с информацией о
+	// каждом из расширений
+	Extensions []string `protobuf:"bytes,1,rep,name=extensions,proto3" json:"extensions,omitempty"`
 	SpaceId    string   `protobuf:"bytes,2,opt,name=space_id,json=spaceId,proto3" json:"space_id,omitempty"` // Пространство имен расширения
 	EnvId      string   `protobuf:"bytes,3,opt,name=env_id,json=envId,proto3" json:"env_id,omitempty"`       // Идентификатор окружения
-	State      []State  `protobuf:"varint,4,rep,packed,name=state,proto3,enum=extensions.State" json:"state,omitempty"`
+	// Вернуть список расширений, которые находятся в одном из переданных состояний
+	// Если список состояний пустой, по умолчанию возвращаются расширения в любом состоянии,
+	// РєСЂРѕРјРµ NOT_INSTALLED
+	State []State `protobuf:"varint,4,rep,packed,name=state,proto3,enum=extensions.State" json:"state,omitempty"`
 }
 
 func (x *ListExtensionsRequest) Reset() {
@@ -174,7 +181,11 @@ func (x *ListExtensionsRequest) GetState() []State {
 	return nil
 }
 
-// ListExtensionsResponse - описание расширения
+// ListExtensionsResponse - описание расширений. Результирующий список возвращается всегда
+// в отсортированном виде:
+//   - Если `ListExtensionsRequest.extensions` пустой, то отсортированный по идентификатору расширения
+//   - Если `ListExtensionsRequest.extensions` заполнен, то возвращаются расширения в соответствующем
+//     запросу порядке
 type ListExtensionsResponse struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
diff --git a/proto/extensions/manager_service_grpc.pb.go b/proto/extensions/manager_service_grpc.pb.go
index 21dc84b2..c75c7cc3 100644
--- a/proto/extensions/manager_service_grpc.pb.go
+++ b/proto/extensions/manager_service_grpc.pb.go
@@ -72,7 +72,7 @@ type ExtensionManagerServiceClient interface {
 	UnregisterExtensions(ctx context.Context, in *UnregisterExtensionsRequest, opts ...grpc.CallOption) (*UnregisterExtensionsResponse, error)
 	// Получить список зарегистрированных сервисов
 	ListRegisteredExtensions(ctx context.Context, in *ListRegisteredExtensionsRequest, opts ...grpc.CallOption) (*ListRegisteredExtensionsResponse, error)
-	// ListExtensions - получить статус расширения
+	// ListExtensions - получить информацию о расширениях
 	ListExtensions(ctx context.Context, in *ListExtensionsRequest, opts ...grpc.CallOption) (*ListExtensionsResponse, error)
 }
 
@@ -140,7 +140,7 @@ type ExtensionManagerServiceServer interface {
 	UnregisterExtensions(context.Context, *UnregisterExtensionsRequest) (*UnregisterExtensionsResponse, error)
 	// Получить список зарегистрированных сервисов
 	ListRegisteredExtensions(context.Context, *ListRegisteredExtensionsRequest) (*ListRegisteredExtensionsResponse, error)
-	// ListExtensions - получить статус расширения
+	// ListExtensions - получить информацию о расширениях
 	ListExtensions(context.Context, *ListExtensionsRequest) (*ListExtensionsResponse, error)
 	mustEmbedUnimplementedExtensionManagerServiceServer()
 }
-- 
GitLab