From 18f98d06a2e0403e8f4a90964529c96389893fd6 Mon Sep 17 00:00:00 2001
From: Anton Sattarov <sattarov@perx.ru>
Date: Fri, 5 Apr 2024 10:44:18 +0000
Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?=
 =?UTF-8?q?=D0=BD=D0=B0=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=20?=
 =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BC?=
 =?UTF-8?q?=D0=B5=D1=82=D0=B0=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B8?=
 =?UTF-8?q?=D0=B7=20=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=B0=20=D0=BA=20?=
 =?UTF-8?q?actions?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 pkg/extension/action.go     | 29 ++++++++++++++++++++++++++++-
 pkg/references/reference.go | 18 ++++++++++++++++++
 2 files changed, 46 insertions(+), 1 deletion(-)

diff --git a/pkg/extension/action.go b/pkg/extension/action.go
index a8062d3d..55827d81 100644
--- a/pkg/extension/action.go
+++ b/pkg/extension/action.go
@@ -1,6 +1,8 @@
 package extension
 
 import (
+	"strings"
+
 	"git.perx.ru/perxis/perxis-go/pkg/references"
 	pb "git.perx.ru/perxis/perxis-go/proto/extensions"
 	"github.com/mitchellh/mapstructure"
@@ -116,7 +118,7 @@ func ActionToMap(action *Action) map[string]interface{} {
 	if action == nil {
 		return nil
 	}
-	
+
 	res := make(map[string]interface{})
 	if err := mapstructure.Decode(action, &res); err != nil {
 		return nil
@@ -274,3 +276,28 @@ func ActionToPB(a *Action) *pb.Action {
 		Order:            a.Order,
 	}
 }
+
+func (r *ActionRequest) NewSubRequest() *ActionRequest {
+	md := map[string]string{
+		"request_extension":     r.Extension,
+		"request_action":        r.Action,
+		"request_space_id":      r.SpaceID,
+		"request_env_id":        r.EnvID,
+		"request_collection_id": r.CollectionID,
+		"request_item_id":       r.ItemID,
+		"request_item_ids":      strings.Join(r.ItemIDs, ","),
+		"request_fields":        strings.Join(r.Fields, ","),
+		"request_refs":          references.ReferenceListToString(r.Refs),
+		"request_params":        r.Params.String(),
+	}
+
+	for k, v := range r.Metadata {
+		if _, exist := md[k]; !exist {
+			md[k] = v
+		}
+	}
+
+	return &ActionRequest{
+		Metadata: md,
+	}
+}
diff --git a/pkg/references/reference.go b/pkg/references/reference.go
index 171ded42..75b9bc74 100644
--- a/pkg/references/reference.go
+++ b/pkg/references/reference.go
@@ -1,6 +1,8 @@
 package references
 
 import (
+	"strings"
+
 	"git.perx.ru/perxis/perxis-go/pkg/items"
 	pb "git.perx.ru/perxis/perxis-go/proto/references"
 	"go.mongodb.org/mongo-driver/bson"
@@ -82,6 +84,22 @@ func ReferenceListToPB(refs []*Reference) []*pb.Reference {
 	return list
 }
 
+func ReferenceListToString(refs []*Reference) string {
+	var res strings.Builder
+
+	for _, ref := range refs {
+		res.WriteString(ref.String())
+	}
+	return res.String()
+}
+
+func ReferenceListToStrings(refs []*Reference) (res []string) {
+	for _, ref := range refs {
+		res = append(res, ref.String())
+	}
+	return
+}
+
 func (r *Reference) String() string {
 	if r == nil {
 		return ""
-- 
GitLab