diff --git a/pkg/extension/action.go b/pkg/extension/action.go index a8062d3ddda18f6a7990eb122262aac336d3a919..55827d81e6c5b2237b1f2ee188f88293ea22c08b 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 171ded420c3fd5601cac9ad9f74ad69883f964ea..75b9bc745d430ed0984ceedd07cf877adcb643e3 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 ""