diff --git a/pkg/extension/action.go b/pkg/extension/action.go index d4839a8adf4698545007e296fc0c17d311de8969..31b76e931025d0e04e7b4f34b306e689b011fc61 100644 --- a/pkg/extension/action.go +++ b/pkg/extension/action.go @@ -9,34 +9,30 @@ import ( type ( ActionKind = pb.Action_Kind ResponseState = pb.ActionResponse_State + ActionTarget = pb.Target - ActionRequest = pb.ActionRequest - ActionResponse = pb.ActionResponse - - ActionTarget = pb.Target - - //ActionRequest struct { - // Extension string - // Action string - // SpaceID string - // EnvID string - // CollectionID string - // ItemID string - // ItemIDs []string - // Fields []string - // Metadata map[string]string - // Refs []*references.Reference - // Params *references.Reference - //} - // - //ActionResponse struct { - // State ResponseState - // Msg string - // Error string - // Next []*Action - // Metadata map[string]string - // Refs []*references.Reference - //} + ActionRequest struct { + Extension string + Action string + SpaceID string + EnvID string + CollectionID string + ItemID string + ItemIDs []string + Fields []string + Metadata map[string]string + Refs []*references.Reference + Params *references.Reference + } + + ActionResponse struct { + State ResponseState + Msg string + Error string + Next []*Action + Metadata map[string]string + Refs []*references.Reference + } ) const ( @@ -90,82 +86,82 @@ func ActionFromMap(d map[string]interface{}) (*Action, error) { return &action, err } -//func ActionRequestToPB(req *ActionRequest) *pb.ActionRequest { -// if req == nil { -// return nil -// } -// return &pb.ActionRequest{ -// Extension: req.Extension, -// Action: req.Action, -// SpaceId: req.SpaceID, -// EnvId: req.EnvID, -// CollectionId: req.CollectionID, -// ItemId: req.ItemID, -// ItemIds: req.ItemIDs, -// Fields: req.Fields, -// Metadata: req.Metadata, -// Refs: references.ReferenceListToPB(req.Refs), -// Params: references.ReferenceToPB(req.Params), -// } -//} -// -//func ActionRequestFromPB(req *pb.ActionRequest) *ActionRequest { -// if req == nil { -// return nil -// } -// return &ActionRequest{ -// Extension: req.Extension, -// Action: req.Action, -// SpaceID: req.SpaceId, -// EnvID: req.EnvId, -// CollectionID: req.CollectionId, -// ItemID: req.ItemId, -// ItemIDs: req.ItemIds, -// Fields: req.Fields, -// Metadata: req.Metadata, -// Refs: references.ReferenceListFromPB(req.Refs), -// Params: references.ReferenceFromPB(req.Params), -// } -//} -//func ActionResponseToPB(out *ActionResponse) *pb.ActionResponse { -// if out == nil { -// return nil -// } -// -// var next []*pb.Action -// for _, a := range out.Next { -// next = append(next, ActionToPB(a)) -// } -// -// return &pb.ActionResponse{ -// State: out.State, -// Msg: out.Msg, -// Error: out.Error, -// Next: next, -// Metadata: out.Metadata, -// Refs: references.ReferenceListToPB(out.Refs), -// } -//} -// -//func ActionResponseFromPB(out *pb.ActionResponse) *ActionResponse { -// if out == nil { -// return nil -// } -// -// var next []*Action -// for _, a := range out.Next { -// next = append(next, ActionFromPB(a)) -// } -// -// return &ActionResponse{ -// State: out.State, -// Msg: out.Msg, -// Error: out.Error, -// Next: next, -// Metadata: out.Metadata, -// Refs: references.ReferenceListFromPB(out.Refs), -// } -//} +func ActionRequestToPB(req *ActionRequest) *pb.ActionRequest { + if req == nil { + return nil + } + return &pb.ActionRequest{ + Extension: req.Extension, + Action: req.Action, + SpaceId: req.SpaceID, + EnvId: req.EnvID, + CollectionId: req.CollectionID, + ItemId: req.ItemID, + ItemIds: req.ItemIDs, + Fields: req.Fields, + Metadata: req.Metadata, + Refs: references.ReferenceListToPB(req.Refs), + Params: references.ReferenceToPB(req.Params), + } +} + +func ActionRequestFromPB(req *pb.ActionRequest) *ActionRequest { + if req == nil { + return nil + } + return &ActionRequest{ + Extension: req.Extension, + Action: req.Action, + SpaceID: req.SpaceId, + EnvID: req.EnvId, + CollectionID: req.CollectionId, + ItemID: req.ItemId, + ItemIDs: req.ItemIds, + Fields: req.Fields, + Metadata: req.Metadata, + Refs: references.ReferenceListFromPB(req.Refs), + Params: references.ReferenceFromPB(req.Params), + } +} +func ActionResponseToPB(out *ActionResponse) *pb.ActionResponse { + if out == nil { + return nil + } + + var next []*pb.Action + for _, a := range out.Next { + next = append(next, ActionToPB(a)) + } + + return &pb.ActionResponse{ + State: out.State, + Msg: out.Msg, + Error: out.Error, + Next: next, + Metadata: out.Metadata, + Refs: references.ReferenceListToPB(out.Refs), + } +} + +func ActionResponseFromPB(out *pb.ActionResponse) *ActionResponse { + if out == nil { + return nil + } + + var next []*Action + for _, a := range out.Next { + next = append(next, ActionFromPB(a)) + } + + return &ActionResponse{ + State: out.State, + Msg: out.Msg, + Error: out.Error, + Next: next, + Metadata: out.Metadata, + Refs: references.ReferenceListFromPB(out.Refs), + } +} func ActionFromPB(a *pb.Action) *Action { if a == nil { @@ -185,8 +181,7 @@ func ActionFromPB(a *pb.Action) *Action { Classes: a.Classes, Refs: references.ReferenceListFromPB(a.Refs), ParamsCollection: a.ParamsCollection, - Request: a.Request, - //Request: ActionRequestFromPB(a.Request), + Request: ActionRequestFromPB(a.Request), NavigationAction: a.NavigationAction, NavigationRoute: a.NavigationRoute, Autorun: a.Autorun, @@ -194,26 +189,24 @@ func ActionFromPB(a *pb.Action) *Action { } } -// -//func ActionToPB(a *Action) *pb.Action { -// if a == nil { -// return nil -// } -// return &pb.Action{ -// Extension: a.Extension, -// Action: a.Action, -// Name: a.Name, -// Description: a.Description, -// Icon: a.Icon, -// Image: references.ReferenceToPB(a.Image), -// Groups: a.Groups, -// Kind: a.Kind, -// Classes: a.Classes, -// Refs: references.ReferenceListToPB(a.Refs), -// ParamsCollection: a.ParamsCollection, -// Request: a.Request, -// //Request: ActionRequestToPB(a.Request), -// NavigationAction: a.NavigationAction, -// NavigationRoute: a.NavigationRoute, -// } -//} +func ActionToPB(a *Action) *pb.Action { + if a == nil { + return nil + } + return &pb.Action{ + Extension: a.Extension, + Action: a.Action, + Name: a.Name, + Description: a.Description, + Icon: a.Icon, + Image: references.ReferenceToPB(a.Image), + Groups: a.Groups, + Kind: a.Kind, + Classes: a.Classes, + Refs: references.ReferenceListToPB(a.Refs), + ParamsCollection: a.ParamsCollection, + Request: ActionRequestToPB(a.Request), + NavigationAction: a.NavigationAction, + NavigationRoute: a.NavigationRoute, + } +} diff --git a/pkg/extension/client.go b/pkg/extension/client.go index 3f8d8bcb02427cddf7ccd8af2279924c091e3a21..00aa3859a7945f43367c378500acda9ed9c14c03 100644 --- a/pkg/extension/client.go +++ b/pkg/extension/client.go @@ -83,6 +83,6 @@ func (c *Client) Check(ctx context.Context, req *CheckRequest) error { } func (c Client) Action(ctx context.Context, in *ActionRequest) (*ActionResponse, error) { - out, err := c.client.Action(ctx, in) - return out, err + out, err := c.client.Action(ctx, ActionRequestToPB(in)) + return ActionResponseFromPB(out), err } diff --git a/pkg/extension/schema_test.go b/pkg/extension/schema_test.go index 9892ba109597aac89bad74fc7f504d0a351de495..20648678a159b6703d05687530ba8e16ded4c8f2 100644 --- a/pkg/extension/schema_test.go +++ b/pkg/extension/schema_test.go @@ -47,6 +47,7 @@ func TestEqualSchema(t *testing.T) { require.NoError(t, err) s2 := schema.New() err = json.Unmarshal(b, s2) + require.NoError(t, err) require.Equal(t, s1.Field, s2.Field) } } diff --git a/pkg/extension/server.go b/pkg/extension/server.go index 4ddb3143008efaeaaf70b5c74042feaece95b5df..90d3db41efd3224f23e34ec5bc4ae6bf5b30752c 100644 --- a/pkg/extension/server.go +++ b/pkg/extension/server.go @@ -183,7 +183,7 @@ func (s *Server) Action(ctx context.Context, in *pb.ActionRequest) (*pb.ActionRe return nil, err } - out, err := svc[0].Action(ctx, in) + out, err := svc[0].Action(ctx, ActionRequestFromPB(in)) if out == nil { out = &ActionResponse{} @@ -195,7 +195,7 @@ func (s *Server) Action(ctx context.Context, in *pb.ActionRequest) (*pb.ActionRe out.Msg += errors.GetDetail(err) } - return out, nil + return ActionResponseToPB(out), nil } func (s *Server) Start() error { diff --git a/pkg/extension/server_test.go b/pkg/extension/server_test.go index 5a0a1691cdb9c43d98f407d5a0a00ebb1563e446..137fdb82dab4aa538b2bfcd336e9e1c608e2a483 100644 --- a/pkg/extension/server_test.go +++ b/pkg/extension/server_test.go @@ -55,8 +55,8 @@ func TestServer_Action(t *testing.T) { extension: getDummyExtension("test-extension"), in: &ActionRequest{ Action: "grpc:///test-extension/test-action", - SpaceId: "sp", - EnvId: "env", + SpaceID: "sp", + EnvID: "env", }, want: &ActionResponse{State: ResponseDone}, }, @@ -65,8 +65,8 @@ func TestServer_Action(t *testing.T) { extension: getDummyExtension("test-extension"), in: &ActionRequest{ Action: "some:///space/env/coll", - SpaceId: "sp", - EnvId: "env", + SpaceID: "sp", + EnvID: "env", }, want: &ActionResponse{State: ResponseDone}, wantErr: "invalid action", @@ -76,8 +76,8 @@ func TestServer_Action(t *testing.T) { extension: getDummyExtension("test-extension"), in: &ActionRequest{ Action: "test-action", - SpaceId: "sp", - EnvId: "env", + SpaceID: "sp", + EnvID: "env", Extension: "test-extension", }, want: &ActionResponse{State: ResponseDone}, @@ -87,8 +87,8 @@ func TestServer_Action(t *testing.T) { extension: getDummyExtension("test-extension"), in: &ActionRequest{ Action: "grpc:///test-extension-2/test-action", - SpaceId: "sp", - EnvId: "env", + SpaceID: "sp", + EnvID: "env", }, want: nil, wantErr: errors.Wrap(ErrUnknownExtension, "test-extension-2").Error(), @@ -98,8 +98,8 @@ func TestServer_Action(t *testing.T) { extension: getDummyExtension("test-extension"), in: &ActionRequest{ Action: "test-action", - SpaceId: "sp", - EnvId: "env", + SpaceID: "sp", + EnvID: "env", }, want: nil, wantErr: "invalid action", @@ -108,8 +108,8 @@ func TestServer_Action(t *testing.T) { name: "Deprecated call, without action and extension)", extension: getDummyExtension("test-extension"), in: &ActionRequest{ - SpaceId: "sp", - EnvId: "env", + SpaceID: "sp", + EnvID: "env", }, want: nil, wantErr: "invalid action", @@ -119,14 +119,14 @@ func TestServer_Action(t *testing.T) { t.Run(tt.name, func(t *testing.T) { srv := NewServer(NamedExtensions(tt.extension)) - got, err := srv.Action(context.Background(), tt.in) + got, err := srv.Action(context.Background(), ActionRequestToPB(tt.in)) if tt.wantErr != "" { require.Error(t, err) assert.EqualErrorf(t, err, tt.wantErr, fmt.Sprintf("Action(%v)", tt.in)) return } require.NoError(t, err) - assert.Equalf(t, tt.want, got, "Action(%v)", tt.in) + assert.Equalf(t, tt.want, ActionResponseFromPB(got), "Action(%v)", tt.in) }) } } diff --git a/pkg/extension/service/extension_test.go b/pkg/extension/service/extension_test.go index e0582966ae25186f6ddef5014fdd972544521f8a..d96712dd664e45531529f7a448dd870f07b32037 100644 --- a/pkg/extension/service/extension_test.go +++ b/pkg/extension/service/extension_test.go @@ -20,7 +20,7 @@ func TestExtension_Action(t *testing.T) { { name: "Router with 1 named action", desc: &extension.ExtensionDescriptor{Extension: "test", Title: "Test Extension", Description: "desc", Version: "v.0.0.1"}, - in: &extension.ActionRequest{Action: "grpc:///test/action", SpaceId: "sp", EnvId: "env", CollectionId: "coll"}, + in: &extension.ActionRequest{Action: "grpc:///test/action", SpaceID: "sp", EnvID: "env", CollectionID: "coll"}, want: "Called action", router: extension.Named("action", func(ctx context.Context, url *extension.ActionURL, req *extension.ActionRequest) (*extension.ActionResponse, error) { return &extension.ActionResponse{State: extension.ResponseDone, Msg: "Called action"}, nil @@ -30,7 +30,7 @@ func TestExtension_Action(t *testing.T) { { name: "Router with 2 named actions", desc: &extension.ExtensionDescriptor{Extension: "test", Title: "Test Extension", Description: "desc", Version: "v.0.0.1"}, - in: &extension.ActionRequest{Action: "grpc:///test/action2", SpaceId: "sp", EnvId: "env", CollectionId: "coll"}, + in: &extension.ActionRequest{Action: "grpc:///test/action2", SpaceID: "sp", EnvID: "env", CollectionID: "coll"}, want: "Called action2", router: extension.Chain(extension.Named("action", func(ctx context.Context, url *extension.ActionURL, req *extension.ActionRequest) (*extension.ActionResponse, error) { return &extension.ActionResponse{State: extension.ResponseDone}, nil @@ -42,7 +42,7 @@ func TestExtension_Action(t *testing.T) { { name: "Error (no extension)", desc: &extension.ExtensionDescriptor{Extension: "test", Title: "Test Extension", Description: "desc", Version: "v.0.0.1"}, - in: &extension.ActionRequest{Action: "grpc:///test2/action2", SpaceId: "sp", EnvId: "env", CollectionId: "coll"}, + in: &extension.ActionRequest{Action: "grpc:///test2/action2", SpaceID: "sp", EnvID: "env", CollectionID: "coll"}, router: extension.Chain(extension.Named("action", func(ctx context.Context, url *extension.ActionURL, req *extension.ActionRequest) (*extension.ActionResponse, error) { return &extension.ActionResponse{State: extension.ResponseDone}, nil }), extension.Named("action2", func(ctx context.Context, url *extension.ActionURL, req *extension.ActionRequest) (*extension.ActionResponse, error) { diff --git a/pkg/extension/storage.go b/pkg/extension/storage.go index 3da54fec9223a0eb53ce5a88a59133be860425bb..c23a7d40a8d3d4817e303e51bb799931ceba5a8c 100644 --- a/pkg/extension/storage.go +++ b/pkg/extension/storage.go @@ -2,7 +2,6 @@ package extension import ( "context" - "fmt" "strings" "git.perx.ru/perxis/perxis-go/pkg/collections" @@ -80,10 +79,7 @@ func (s *storage) GetExtension(ctx context.Context, spaceID, envID string, exten func (s *storage) FindExtensions(ctx context.Context, spaceID, envID string, extensions ...string) ([]*Info, error) { var itemsFilter *items.Filter if len(extensions) != 0 { - q := make([]interface{}, 0, len(extensions)+1) - for _, e := range extensions { - q = append(q, fmt.Sprintf("id contains '%s'", e)) - } + itemsFilter.ID = extensions } itms, _, err := s.content.Items.Find(ctx, spaceID, envID, ExtensionsCollectionID, itemsFilter) diff --git a/pkg/references/reference.go b/pkg/references/reference.go index 12dac1865a17a39ac6876aa4390f89d408e4f76c..5740c929bfde2c0c11abcd96d75ce3122448f50e 100644 --- a/pkg/references/reference.go +++ b/pkg/references/reference.go @@ -26,6 +26,9 @@ func (r *Reference) MarshalBSON() ([]byte, error) { } func ReferenceFromPB(refPB *pb.Reference) *Reference { + if refPB == nil { + return nil + } return &Reference{ ID: refPB.Id, CollectionID: refPB.CollectionId, @@ -45,6 +48,9 @@ func ReferenceFromItem(item *items.Item) *Reference { } func ReferenceToPB(ref *Reference) *pb.Reference { + if ref == nil { + return nil + } return &pb.Reference{ Id: ref.ID, CollectionId: ref.CollectionID, @@ -52,14 +58,30 @@ func ReferenceToPB(ref *Reference) *pb.Reference { } } -func ReferenceListFromPB(listPB []*pb.Reference) []*Reference { - list := make([]*Reference, 0, len(listPB)) - for _, refPB := range listPB { +func ReferenceListFromPB(refsPB []*pb.Reference) []*Reference { + if refsPB == nil { + return nil + } + + list := make([]*Reference, 0, len(refsPB)) + for _, refPB := range refsPB { list = append(list, ReferenceFromPB(refPB)) } return list } +func ReferenceListToPB(refs []*Reference) []*pb.Reference { + if refs == nil { + return nil + } + + list := make([]*pb.Reference, 0, len(refs)) + for _, ref := range refs { + list = append(list, ReferenceToPB(ref)) + } + return list +} + func (r *Reference) String() string { if r == nil { return ""