From 4d8e01f24412a3b97feb4ba41853ac1ec41df7c9 Mon Sep 17 00:00:00 2001 From: Peter Grlica Date: Thu, 8 Oct 2020 09:43:12 +0200 Subject: [PATCH] Rename all *List types to *Set, generated fields rebuilt --- federation/rest.yaml | 6 ++- federation/rest/request/manageStructure.go | 39 +++++++-------- federation/types/exposed_module.go | 8 +-- federation/types/module_field.go | 10 ++-- federation/types/module_field_mapping.go | 10 ++-- federation/types/module_mapping.go | 6 +-- federation/types/shared_module.go | 12 ++--- store/federation_module_mappings.gen.go | 8 +-- store/federation_module_mappings.yaml | 5 +- store/rdbms/federation_module_mappings.gen.go | 50 +++++++++++++++---- 10 files changed, 92 insertions(+), 62 deletions(-) diff --git a/federation/rest.yaml b/federation/rest.yaml index 9f0257a55..f819b94fc 100644 --- a/federation/rest.yaml +++ b/federation/rest.yaml @@ -84,6 +84,8 @@ endpoints: entrypoint: manageStructure path: "/nodes/{nodeID}" authentication: [] + imports: + - github.com/cortezaproject/corteza-server/federation/types apis: - name: readExposed method: GET @@ -114,7 +116,7 @@ endpoints: name: composeModuleID required: true title: Compose module id - - type: types.ModuleFieldList + - type: types.ModuleFieldSet name: fields required: false title: Exposed module fields @@ -165,7 +167,7 @@ endpoints: name: composeModuleID required: true title: Compose module id - - type: types.ModuleFieldMappingList + - type: types.ModuleFieldMappingSet name: fields required: false title: Exposed module fields diff --git a/federation/rest/request/manageStructure.go b/federation/rest/request/manageStructure.go index 6de145cdc..0fada0665 100644 --- a/federation/rest/request/manageStructure.go +++ b/federation/rest/request/manageStructure.go @@ -11,14 +11,13 @@ package request import ( "encoding/json" "fmt" + "github.com/cortezaproject/corteza-server/federation/types" + "github.com/cortezaproject/corteza-server/pkg/payload" + "github.com/go-chi/chi" "io" "mime/multipart" "net/http" "strings" - - "github.com/cortezaproject/corteza-server/federation/types" - "github.com/cortezaproject/corteza-server/pkg/payload" - "github.com/go-chi/chi" ) // dummy vars to prevent @@ -57,7 +56,7 @@ type ( // Fields POST parameter // // Exposed module fields - Fields types.ModuleFieldList + Fields types.ModuleFieldSet } ManageStructureRemoveExposed struct { @@ -103,7 +102,7 @@ type ( // Fields POST parameter // // Exposed module fields - Fields types.ModuleFieldMappingList + Fields types.ModuleFieldMappingSet } ManageStructureReadMappings struct { @@ -218,7 +217,7 @@ func (r ManageStructureCreateExposed) GetComposeModuleID() uint64 { } // Auditable returns all auditable/loggable parameters -func (r ManageStructureCreateExposed) GetFields() types.ModuleFieldList { +func (r ManageStructureCreateExposed) GetFields() types.ModuleFieldSet { return r.Fields } @@ -249,12 +248,12 @@ func (r *ManageStructureCreateExposed) Fill(req *http.Request) (err error) { } } - // if val, ok := req.Form["fields"]; ok && len(val) > 0 { - // r.Fields, err = types.ModuleFieldList(val[0]), nil - // if err != nil { - // return err - // } - // } + //if val, ok := req.Form["fields[]"]; ok && len(val) > 0 { + // r.Fields, err = types.ModuleFieldSet(val), nil + // if err != nil { + // return err + // } + //} } { @@ -417,7 +416,7 @@ func (r ManageStructureCreateMappings) GetComposeModuleID() uint64 { } // Auditable returns all auditable/loggable parameters -func (r ManageStructureCreateMappings) GetFields() types.ModuleFieldMappingList { +func (r ManageStructureCreateMappings) GetFields() types.ModuleFieldMappingSet { return r.Fields } @@ -448,12 +447,12 @@ func (r *ManageStructureCreateMappings) Fill(req *http.Request) (err error) { } } - // if val, ok := req.Form["fields"]; ok && len(val) > 0 { - // r.Fields, err = types.ModuleFieldMappingList(val[0]), nil - // if err != nil { - // return err - // } - // } + //if val, ok := req.Form["fields[]"]; ok && len(val) > 0 { + // r.Fields, err = types.ModuleFieldMappingSet(val), nil + // if err != nil { + // return err + // } + //} } { diff --git a/federation/types/exposed_module.go b/federation/types/exposed_module.go index bf370c6b3..48c78a1c1 100644 --- a/federation/types/exposed_module.go +++ b/federation/types/exposed_module.go @@ -8,10 +8,10 @@ import ( type ( ExposedModule struct { - ID uint64 `json:"moduleID,string"` - NodeID uint64 `json:"nodeID,string"` - ComposeModuleID uint64 `json:"composeModuleID,string"` - Fields ModuleFieldList `json:"fields"` + ID uint64 `json:"moduleID,string"` + NodeID uint64 `json:"nodeID,string"` + ComposeModuleID uint64 `json:"composeModuleID,string"` + Fields ModuleFieldSet `json:"fields"` CreatedAt time.Time `json:"createdAt,omitempty"` UpdatedAt *time.Time `json:"updatedAt,omitempty"` diff --git a/federation/types/module_field.go b/federation/types/module_field.go index 49f323a11..b55e1e3f0 100644 --- a/federation/types/module_field.go +++ b/federation/types/module_field.go @@ -8,7 +8,7 @@ import ( ) type ( - ModuleFieldList []*ModuleField + ModuleFieldSet []*ModuleField ModuleField struct { Kind string `json:"kind"` @@ -18,17 +18,17 @@ type ( } ) -func (list ModuleFieldList) Value() (driver.Value, error) { +func (list ModuleFieldSet) Value() (driver.Value, error) { return json.Marshal(list) } -func (list *ModuleFieldList) Scan(value interface{}) error { +func (list *ModuleFieldSet) Scan(value interface{}) error { switch value.(type) { case nil: - *list = ModuleFieldList{} + *list = ModuleFieldSet{} case []uint8: if err := json.Unmarshal(value.([]byte), list); err != nil { - return errors.New(fmt.Sprintf("Can not scan '%v' into ModuleFieldList", value)) + return errors.New(fmt.Sprintf("Can not scan '%v' into ModuleFieldSet", value)) } } diff --git a/federation/types/module_field_mapping.go b/federation/types/module_field_mapping.go index 9682b6461..b86046387 100644 --- a/federation/types/module_field_mapping.go +++ b/federation/types/module_field_mapping.go @@ -8,7 +8,7 @@ import ( ) type ( - ModuleFieldMappingList []*ModuleFieldMapping + ModuleFieldMappingSet []*ModuleFieldMapping ModuleFieldMapping struct { Origin ModuleField `json:"origin"` @@ -16,17 +16,17 @@ type ( } ) -func (list ModuleFieldMappingList) Value() (driver.Value, error) { +func (list ModuleFieldMappingSet) Value() (driver.Value, error) { return json.Marshal(list) } -func (list *ModuleFieldMappingList) Scan(value interface{}) error { +func (list *ModuleFieldMappingSet) Scan(value interface{}) error { switch value.(type) { case nil: - *list = ModuleFieldMappingList{} + *list = ModuleFieldMappingSet{} case []uint8: if err := json.Unmarshal(value.([]byte), list); err != nil { - return errors.New(fmt.Sprintf("Can not scan '%v' into ModuleFieldMappingList", value)) + return errors.New(fmt.Sprintf("Can not scan '%v' into ModuleFieldMappingSet", value)) } } diff --git a/federation/types/module_mapping.go b/federation/types/module_mapping.go index 7b950378a..f5eab713e 100644 --- a/federation/types/module_mapping.go +++ b/federation/types/module_mapping.go @@ -6,9 +6,9 @@ import ( type ( ModuleMapping struct { - FederationModuleID uint64 `json:"federationModuleID,string"` - ComposeModuleID uint64 `json:"composeModuleID,string"` - FieldMapping ModuleFieldMappingList `json:"fields"` + FederationModuleID uint64 `json:"federationModuleID,string"` + ComposeModuleID uint64 `json:"composeModuleID,string"` + FieldMapping ModuleFieldMappingSet `json:"fields"` } ModuleMappingFilter struct { diff --git a/federation/types/shared_module.go b/federation/types/shared_module.go index fa2e73c42..1eaee710e 100644 --- a/federation/types/shared_module.go +++ b/federation/types/shared_module.go @@ -8,12 +8,12 @@ import ( type ( SharedModule struct { - ID uint64 `json:"moduleID,string"` - NodeID uint64 `json:"nodeID,string"` - Handle string `json:"handle"` - Name string `json:"name"` - ExternalFederationModuleID uint64 `json:"externalFederationModuleID,string"` - Fields ModuleFieldList `json:"fields"` + ID uint64 `json:"moduleID,string"` + NodeID uint64 `json:"nodeID,string"` + Handle string `json:"handle"` + Name string `json:"name"` + ExternalFederationModuleID uint64 `json:"externalFederationModuleID,string"` + Fields ModuleFieldSet `json:"fields"` CreatedAt time.Time `json:"createdAt,omitempty"` UpdatedAt *time.Time `json:"updatedAt,omitempty"` diff --git a/store/federation_module_mappings.gen.go b/store/federation_module_mappings.gen.go index 9309a3969..abe2780bd 100644 --- a/store/federation_module_mappings.gen.go +++ b/store/federation_module_mappings.gen.go @@ -26,7 +26,7 @@ type ( UpsertFederationModuleMapping(ctx context.Context, rr ...*types.ModuleMapping) error DeleteFederationModuleMapping(ctx context.Context, rr ...*types.ModuleMapping) error - DeleteFederationModuleMappingBy(ctx context.Context) error + DeleteFederationModuleMappingByFederationModuleIDComposeModuleID(ctx context.Context, federationModuleID uint64, composeModuleID uint64) error TruncateFederationModuleMappings(ctx context.Context) error } @@ -74,9 +74,9 @@ func DeleteFederationModuleMapping(ctx context.Context, s FederationModuleMappin return s.DeleteFederationModuleMapping(ctx, rr...) } -// DeleteFederationModuleMappingBy Deletes FederationModuleMapping from store -func DeleteFederationModuleMappingBy(ctx context.Context, s FederationModuleMappings) error { - return s.DeleteFederationModuleMappingBy(ctx) +// DeleteFederationModuleMappingByFederationModuleIDComposeModuleID Deletes FederationModuleMapping from store +func DeleteFederationModuleMappingByFederationModuleIDComposeModuleID(ctx context.Context, s FederationModuleMappings, federationModuleID uint64, composeModuleID uint64) error { + return s.DeleteFederationModuleMappingByFederationModuleIDComposeModuleID(ctx, federationModuleID, composeModuleID) } // TruncateFederationModuleMappings Deletes all FederationModuleMappings from store diff --git a/store/federation_module_mappings.yaml b/store/federation_module_mappings.yaml index 0fcf9a664..269953399 100644 --- a/store/federation_module_mappings.yaml +++ b/store/federation_module_mappings.yaml @@ -5,11 +5,10 @@ types: type: types.ModuleMapping fields: - - { field: FederationModuleID } - - { field: ComposeModuleID } + - { field: FederationModuleID, isPrimaryKey: true } + - { field: ComposeModuleID, isPrimaryKey: true } - { field: FieldMapping, type: "json.Text" } - lookups: - fields: [FederationModuleID, ComposeModuleID] description: |- diff --git a/store/rdbms/federation_module_mappings.gen.go b/store/rdbms/federation_module_mappings.gen.go index 792410695..08f1b054c 100644 --- a/store/rdbms/federation_module_mappings.gen.go +++ b/store/rdbms/federation_module_mappings.gen.go @@ -13,7 +13,6 @@ import ( "database/sql" "errors" "fmt" - "github.com/Masterminds/squirrel" "github.com/cortezaproject/corteza-server/federation/types" "github.com/cortezaproject/corteza-server/pkg/filter" @@ -107,6 +106,15 @@ func (s Store) fetchFullPageOfFederationModuleMappings( err error ) + // Make sure we always end our sort by primary keys + if sort.Get("rel_federation_module") == nil { + sort = append(sort, &filter.SortExpr{Column: "rel_federation_module"}) + } + + if sort.Get("rel_compose_module") == nil { + sort = append(sort, &filter.SortExpr{Column: "rel_compose_module"}) + } + // Apply sorting expr from filter to query if q, err = setOrderBy(q, sort, s.sortableFederationModuleMappingColumns()...); err != nil { return nil, err @@ -265,8 +273,10 @@ func (s Store) partialFederationModuleMappingUpdate(ctx context.Context, onlyCol err = s.execUpdateFederationModuleMappings( ctx, - squirrel.Eq{}, - s.internalFederationModuleMappingEncoder(res).Skip().Only(onlyColumns...)) + squirrel.Eq{ + s.preprocessColumn("cmd.rel_federation_module", ""): s.preprocessValue(res.FederationModuleID, ""), s.preprocessColumn("cmd.rel_compose_module", ""): s.preprocessValue(res.ComposeModuleID, ""), + }, + s.internalFederationModuleMappingEncoder(res).Skip("rel_federation_module", "rel_compose_module").Only(onlyColumns...)) if err != nil { return s.config.ErrorHandler(err) } @@ -294,9 +304,11 @@ func (s Store) UpsertFederationModuleMapping(ctx context.Context, rr ...*types.M // DeleteFederationModuleMapping Deletes one or more rows from federation_module_mapping table func (s Store) DeleteFederationModuleMapping(ctx context.Context, rr ...*types.ModuleMapping) (err error) { - for _, _ = range rr { + for _, res := range rr { - err = s.execDeleteFederationModuleMappings(ctx, squirrel.Eq{}) + err = s.execDeleteFederationModuleMappings(ctx, squirrel.Eq{ + s.preprocessColumn("cmd.rel_federation_module", ""): s.preprocessValue(res.FederationModuleID, ""), s.preprocessColumn("cmd.rel_compose_module", ""): s.preprocessValue(res.ComposeModuleID, ""), + }) if err != nil { return s.config.ErrorHandler(err) } @@ -305,9 +317,12 @@ func (s Store) DeleteFederationModuleMapping(ctx context.Context, rr ...*types.M return nil } -// DeleteFederationModuleMappingBy Deletes row from the federation_module_mapping table -func (s Store) DeleteFederationModuleMappingBy(ctx context.Context) error { - return s.execDeleteFederationModuleMappings(ctx, squirrel.Eq{}) +// DeleteFederationModuleMappingByFederationModuleIDComposeModuleID Deletes row from the federation_module_mapping table +func (s Store) DeleteFederationModuleMappingByFederationModuleIDComposeModuleID(ctx context.Context, federationModuleID uint64, composeModuleID uint64) error { + return s.execDeleteFederationModuleMappings(ctx, squirrel.Eq{ + s.preprocessColumn("cmd.rel_federation_module", ""): s.preprocessValue(federationModuleID, ""), + s.preprocessColumn("cmd.rel_compose_module", ""): s.preprocessValue(composeModuleID, ""), + }) } // TruncateFederationModuleMappings Deletes all rows from the federation_module_mapping table @@ -351,6 +366,8 @@ func (s Store) execUpsertFederationModuleMappings(ctx context.Context, set store s.config, s.federationModuleMappingTable(), set, + "rel_federation_module", + "rel_compose_module", ) if err != nil { @@ -459,17 +476,30 @@ func (s Store) collectFederationModuleMappingCursorValues(res *types.ModuleMappi // All known primary key columns + pkRel_federation_module bool + + pkRel_compose_module bool + collect = func(cc ...string) { for _, c := range cc { switch c { + case "rel_federation_module": + cursor.Set(c, res.FederationModuleID, false) + + pkRel_federation_module = true + case "rel_compose_module": + cursor.Set(c, res.ComposeModuleID, false) + + pkRel_compose_module = true + } } } ) collect(cc...) - if !hasUnique || !(true) { - collect() + if !hasUnique || !(pkRel_federation_module && pkRel_compose_module && true) { + collect("rel_federation_module", "rel_compose_module") } return cursor