diff --git a/federation/service/exposed_module.go b/federation/service/exposed_module.go index eb351f7e5..4a3034991 100644 --- a/federation/service/exposed_module.go +++ b/federation/service/exposed_module.go @@ -4,7 +4,8 @@ import ( "context" "strconv" - composeService "github.com/cortezaproject/corteza-server/compose/service" + cs "github.com/cortezaproject/corteza-server/compose/service" + ct "github.com/cortezaproject/corteza-server/compose/types" "github.com/cortezaproject/corteza-server/federation/types" "github.com/cortezaproject/corteza-server/pkg/actionlog" "github.com/cortezaproject/corteza-server/store" @@ -13,8 +14,8 @@ import ( type ( exposedModule struct { node node - module composeService.ModuleService - namespace composeService.NamespaceService + module cs.ModuleService + namespace cs.NamespaceService store store.Storer actionlog actionlog.Recorder } @@ -34,8 +35,8 @@ type ( func ExposedModule() ExposedModuleService { return &exposedModule{ node: *DefaultNode, - module: composeService.DefaultModule, - namespace: composeService.DefaultNamespace, + module: cs.DefaultModule, + namespace: cs.DefaultNamespace, store: DefaultStore, actionlog: DefaultActionlog, } @@ -85,7 +86,13 @@ func (svc exposedModule) Update(ctx context.Context, updated *types.ExposedModul // return ExposedModuleErrNotAllowedToCreate() // } - if _, err := svc.node.FindByID(ctx, updated.NodeID); err != nil { + var ( + m *ct.Module + node *types.Node + old *types.ExposedModule + ) + + if node, err = svc.node.FindByID(ctx, updated.NodeID); err != nil { return ExposedModuleErrNodeNotFound() } @@ -93,19 +100,24 @@ func (svc exposedModule) Update(ctx context.Context, updated *types.ExposedModul return ExposedModuleErrComposeNamespaceNotFound() } - if _, err := svc.module.With(ctx).FindByID(updated.ComposeNamespaceID, updated.ComposeModuleID); err != nil { + if m, err = svc.module.With(ctx).FindByID(updated.ComposeNamespaceID, updated.ComposeModuleID); err != nil { return ExposedModuleErrComposeModuleNotFound() } - old, err := svc.FindByID(ctx, updated.NodeID, updated.ID) - - if err != nil { + if old, err = svc.FindByID(ctx, updated.NodeID, updated.ID); err != nil { return ExposedModuleErrNotFound() } updated.UpdatedAt = now() updated.CreatedAt = old.CreatedAt + // set labels + AddFederationLabel(m, node.BaseURL) + + if _, err := svc.module.With(ctx).Update(m); err != nil { + return err + } + aProps.setModule(updated) if err = store.UpdateFederationExposedModule(ctx, s, updated); err != nil { @@ -204,8 +216,12 @@ func (svc exposedModule) Create(ctx context.Context, new *types.ExposedModule) ( // if !svc.ac.CanCreateFederationExposedModule(ctx, ns) { // return ExposedModuleErrNotAllowedToCreate() // } + var ( + m *ct.Module + node *types.Node + ) - if _, err := svc.node.FindByID(ctx, new.NodeID); err != nil { + if node, err = svc.node.FindByID(ctx, new.NodeID); err != nil { return ExposedModuleErrNodeNotFound() } @@ -213,7 +229,7 @@ func (svc exposedModule) Create(ctx context.Context, new *types.ExposedModule) ( return ExposedModuleErrComposeNamespaceNotFound() } - if _, err := svc.module.With(ctx).FindByID(new.ComposeNamespaceID, new.ComposeModuleID); err != nil { + if m, err = svc.module.With(ctx).FindByID(new.ComposeNamespaceID, new.ComposeModuleID); err != nil { return ExposedModuleErrComposeModuleNotFound() } @@ -222,11 +238,6 @@ func (svc exposedModule) Create(ctx context.Context, new *types.ExposedModule) ( return ExposedModuleErrNotUnique() } - // Check for node - compose.Module combo - if err = svc.uniqueCheck(ctx, new); err != nil { - return err - } - new.ID = nextID() new.CreatedAt = *now() new.UpdatedAt = nil @@ -236,6 +247,13 @@ func (svc exposedModule) Create(ctx context.Context, new *types.ExposedModule) ( if new.Fields != nil { } + // set labels + AddFederationLabel(m, node.BaseURL) + + if _, err := svc.module.With(ctx).Update(m); err != nil { + return err + } + aProps.setModule(new) if err = store.CreateFederationExposedModule(ctx, s, new); err != nil { diff --git a/federation/service/module_mapping.go b/federation/service/module_mapping.go index 305865f03..01112a9e6 100644 --- a/federation/service/module_mapping.go +++ b/federation/service/module_mapping.go @@ -3,7 +3,8 @@ package service import ( "context" - composeService "github.com/cortezaproject/corteza-server/compose/service" + cs "github.com/cortezaproject/corteza-server/compose/service" + ct "github.com/cortezaproject/corteza-server/compose/types" "github.com/cortezaproject/corteza-server/federation/types" "github.com/cortezaproject/corteza-server/pkg/actionlog" "github.com/cortezaproject/corteza-server/store" @@ -12,8 +13,8 @@ import ( type ( moduleMapping struct { store store.Storer - module composeService.ModuleService - namespace composeService.NamespaceService + module cs.ModuleService + namespace cs.NamespaceService actionlog actionlog.Recorder } @@ -33,48 +34,11 @@ func ModuleMapping() ModuleMappingService { return &moduleMapping{ store: DefaultStore, actionlog: DefaultActionlog, - module: composeService.DefaultModule, - namespace: composeService.DefaultNamespace, + module: cs.DefaultModule, + namespace: cs.DefaultNamespace, } } -// func (svc moduleMapping) updater(ctx context.Context, federationModuleID, composeModuleID uint64, action func(...*moduleMappingActionProps) *moduleMappingAction, fn moduleUpdateHandler) (*types.ModuleMapping, error) { -// var ( -// m *types.ModuleMapping -// aProps = &moduleMappingActionProps{mapping: &types.ModuleMapping{FederationModuleID: federationModuleID, ComposeModuleID: composeModuleID}} -// err error -// ) - -// err = store.Tx(ctx, svc.store, func(ctx context.Context, s store.Storer) (err error) { -// if m, err = svc.store.LookupFederationModuleMappingByFederationModuleIDComposeModuleID(ctx, federationModuleID, composeModuleID); err != nil { -// return err -// } - -// // TODO - handle node id also -// if moduleChanged, fieldsChanged, err = fn(ctx, n, m); err != nil { -// return err -// } - -// return err -// }) - -// return m, svc.recordAction(ctx, aProps, action, err) -// } - -// func (svc moduleMapping) DeleteByID(ctx context.Context, federationModuleID, composeModuleID uint64) error { -// _, err := svc.updater(ctx, nodeID, moduleID, ModuleMappingActionDelete(), svc.handleDelete) - -// return err -// } - -// func (svc moduleMapping) handleDelete(ctx context.Context, m *types.ModuleMapping) (bool, bool, error) { -// if err := store.DeleteFederationModuleMapping(ctx, svc.store, m); err != nil { -// return false, false, err -// } - -// return false, false, nil -// } - func (svc moduleMapping) FindByID(ctx context.Context, federationModuleID uint64) (m *types.ModuleMapping, err error) { err = func() error { if m, err = store.LookupFederationModuleMappingByFederationModuleID(ctx, svc.store, federationModuleID); err != nil { @@ -109,24 +73,34 @@ func (svc moduleMapping) Create(ctx context.Context, new *types.ModuleMapping) ( // if !svc.ac.CanCreateFederationExposedModule(ctx, ns) { // return ExposedModuleErrNotAllowedToCreate() // } + var ( + m *ct.Module + ) if _, err := svc.namespace.With(ctx).FindByID(new.ComposeNamespaceID); err != nil { return ModuleMappingErrComposeNamespaceNotFound() } - if _, err := svc.module.With(ctx).FindByID(new.ComposeNamespaceID, new.ComposeModuleID); err != nil { - return ModuleMappingErrComposeModuleNotFound() - } - // Check for federation module - compose.Module combo if err = svc.uniqueCheck(ctx, new); err != nil { return err } + if m, err = svc.module.With(ctx).FindByID(new.ComposeNamespaceID, new.ComposeModuleID); err != nil { + return ModuleMappingErrComposeModuleNotFound() + } + if err = store.CreateFederationModuleMapping(ctx, s, new); err != nil { return err } + // set labels + AddFederationLabel(m, "") + + if _, err := svc.module.With(ctx).Update(m); err != nil { + return err + } + return nil }) @@ -143,12 +117,15 @@ func (svc moduleMapping) Update(ctx context.Context, updated *types.ModuleMappin // if !svc.ac.CanCreateFederationExposedModule(ctx, ns) { // return ExposedModuleErrNotAllowedToCreate() // } + var ( + m *ct.Module + ) if _, err := svc.namespace.With(ctx).FindByID(updated.ComposeNamespaceID); err != nil { return ModuleMappingErrComposeNamespaceNotFound() } - if _, err := svc.module.With(ctx).FindByID(updated.ComposeNamespaceID, updated.ComposeModuleID); err != nil { + if m, err = svc.module.With(ctx).FindByID(updated.ComposeNamespaceID, updated.ComposeModuleID); err != nil { return ModuleMappingErrComposeModuleNotFound() } @@ -156,6 +133,13 @@ func (svc moduleMapping) Update(ctx context.Context, updated *types.ModuleMappin return err } + // set labels + AddFederationLabel(m, "") + + if _, err := svc.module.With(ctx).Update(m); err != nil { + return err + } + return nil }) diff --git a/federation/service/service.go b/federation/service/service.go index ff59d1048..113fc9497 100644 --- a/federation/service/service.go +++ b/federation/service/service.go @@ -9,6 +9,7 @@ import ( "github.com/cortezaproject/corteza-server/pkg/auth" "github.com/cortezaproject/corteza-server/pkg/healthcheck" "github.com/cortezaproject/corteza-server/pkg/id" + "github.com/cortezaproject/corteza-server/pkg/label" "github.com/cortezaproject/corteza-server/pkg/objstore" "github.com/cortezaproject/corteza-server/pkg/objstore/minio" "github.com/cortezaproject/corteza-server/pkg/objstore/plain" @@ -146,3 +147,7 @@ func Watchers(ctx context.Context) { // each minute, 100 per page go syncData.Watch(ctx, time.Second*60, 100) } + +func AddFederationLabel(entity label.LabeledResource, value string) { + entity.SetLabel("federation", value) +}