Add reference to the namespace
This commit is contained in:
parent
ae6c227cef
commit
80cc9eb9f5
@ -19,13 +19,6 @@ $ docker-compose -f federation/etc/docker-compose.yml up -d node_origin
|
||||
$ docker-compose -f federation/etc/docker-compose.yml up -d node_destination
|
||||
----
|
||||
|
||||
Add testing migrations
|
||||
[source,bash]
|
||||
----
|
||||
$ docker-compose -f federation/etc/docker-compose.yml run db_origin mysql -u corteza -prootcorteza corteza -h localhost --port 3306 < federation/migration_federation_origin.sql
|
||||
$ docker-compose -f federation/etc/docker-compose.yml run db_destination mysql -u corteza -prootcorteza corteza -h localhost --port 3307 < federation/migration_federation_destination.sql
|
||||
----
|
||||
|
||||
== Setup db (postgres)
|
||||
|
||||
Add db dsn to .env
|
||||
|
||||
@ -164,6 +164,10 @@ endpoints:
|
||||
name: composeModuleID
|
||||
required: true
|
||||
title: Compose module id
|
||||
- type: uint64
|
||||
name: composeNamespaceID
|
||||
required: true
|
||||
title: Compose namespace id
|
||||
- type: types.ModuleFieldSet
|
||||
name: fields
|
||||
required: false
|
||||
@ -215,6 +219,10 @@ endpoints:
|
||||
name: composeModuleID
|
||||
required: true
|
||||
title: Compose module id
|
||||
- type: uint64
|
||||
name: composeNamespaceID
|
||||
required: true
|
||||
title: Compose namespace id
|
||||
- type: types.ModuleFieldMappingSet
|
||||
name: fields
|
||||
required: false
|
||||
|
||||
@ -28,9 +28,10 @@ func (ctrl ManageStructure) ReadExposed(ctx context.Context, r *request.ManageSt
|
||||
func (ctrl ManageStructure) CreateExposed(ctx context.Context, r *request.ManageStructureCreateExposed) (interface{}, error) {
|
||||
var (
|
||||
mod = &types.ExposedModule{
|
||||
NodeID: r.NodeID,
|
||||
ComposeModuleID: r.ComposeModuleID,
|
||||
Fields: r.Fields,
|
||||
NodeID: r.NodeID,
|
||||
ComposeModuleID: r.ComposeModuleID,
|
||||
ComposeNamespaceID: r.ComposeNamespaceID,
|
||||
Fields: r.Fields,
|
||||
}
|
||||
)
|
||||
|
||||
@ -38,6 +39,10 @@ func (ctrl ManageStructure) CreateExposed(ctx context.Context, r *request.Manage
|
||||
return nil, errors.New("TODO - http 400 bad request - use compose module id in request")
|
||||
}
|
||||
|
||||
if r.ComposeNamespaceID == 0 {
|
||||
return nil, errors.New("TODO - http 400 bad request - use compose namespace id in request")
|
||||
}
|
||||
|
||||
return (service.ExposedModule()).Create(context.Background(), mod)
|
||||
}
|
||||
|
||||
@ -49,6 +54,7 @@ func (ctrl ManageStructure) CreateMappings(ctx context.Context, r *request.Manag
|
||||
mm := &types.ModuleMapping{
|
||||
FederationModuleID: r.ModuleID,
|
||||
ComposeModuleID: r.ComposeModuleID,
|
||||
ComposeNamespaceID: r.ComposeNamespaceID,
|
||||
FieldMapping: r.Fields,
|
||||
}
|
||||
|
||||
|
||||
@ -53,6 +53,11 @@ type (
|
||||
// Compose module id
|
||||
ComposeModuleID uint64 `json:",string"`
|
||||
|
||||
// ComposeNamespaceID POST parameter
|
||||
//
|
||||
// Compose namespace id
|
||||
ComposeNamespaceID uint64 `json:",string"`
|
||||
|
||||
// Fields POST parameter
|
||||
//
|
||||
// Exposed module fields
|
||||
@ -99,6 +104,11 @@ type (
|
||||
// Compose module id
|
||||
ComposeModuleID uint64 `json:",string"`
|
||||
|
||||
// ComposeNamespaceID POST parameter
|
||||
//
|
||||
// Compose namespace id
|
||||
ComposeNamespaceID uint64 `json:",string"`
|
||||
|
||||
// Fields POST parameter
|
||||
//
|
||||
// Exposed module fields
|
||||
@ -200,9 +210,10 @@ func NewManageStructureCreateExposed() *ManageStructureCreateExposed {
|
||||
// Auditable returns all auditable/loggable parameters
|
||||
func (r ManageStructureCreateExposed) Auditable() map[string]interface{} {
|
||||
return map[string]interface{}{
|
||||
"nodeID": r.NodeID,
|
||||
"composeModuleID": r.ComposeModuleID,
|
||||
"fields": r.Fields,
|
||||
"nodeID": r.NodeID,
|
||||
"composeModuleID": r.ComposeModuleID,
|
||||
"composeNamespaceID": r.ComposeNamespaceID,
|
||||
"fields": r.Fields,
|
||||
}
|
||||
}
|
||||
|
||||
@ -216,6 +227,11 @@ func (r ManageStructureCreateExposed) GetComposeModuleID() uint64 {
|
||||
return r.ComposeModuleID
|
||||
}
|
||||
|
||||
// Auditable returns all auditable/loggable parameters
|
||||
func (r ManageStructureCreateExposed) GetComposeNamespaceID() uint64 {
|
||||
return r.ComposeNamespaceID
|
||||
}
|
||||
|
||||
// Auditable returns all auditable/loggable parameters
|
||||
func (r ManageStructureCreateExposed) GetFields() types.ModuleFieldSet {
|
||||
return r.Fields
|
||||
@ -248,6 +264,13 @@ func (r *ManageStructureCreateExposed) Fill(req *http.Request) (err error) {
|
||||
}
|
||||
}
|
||||
|
||||
if val, ok := req.Form["composeNamespaceID"]; ok && len(val) > 0 {
|
||||
r.ComposeNamespaceID, err = payload.ParseUint64(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 {
|
||||
@ -393,10 +416,11 @@ func NewManageStructureCreateMappings() *ManageStructureCreateMappings {
|
||||
// Auditable returns all auditable/loggable parameters
|
||||
func (r ManageStructureCreateMappings) Auditable() map[string]interface{} {
|
||||
return map[string]interface{}{
|
||||
"nodeID": r.NodeID,
|
||||
"moduleID": r.ModuleID,
|
||||
"composeModuleID": r.ComposeModuleID,
|
||||
"fields": r.Fields,
|
||||
"nodeID": r.NodeID,
|
||||
"moduleID": r.ModuleID,
|
||||
"composeModuleID": r.ComposeModuleID,
|
||||
"composeNamespaceID": r.ComposeNamespaceID,
|
||||
"fields": r.Fields,
|
||||
}
|
||||
}
|
||||
|
||||
@ -415,6 +439,11 @@ func (r ManageStructureCreateMappings) GetComposeModuleID() uint64 {
|
||||
return r.ComposeModuleID
|
||||
}
|
||||
|
||||
// Auditable returns all auditable/loggable parameters
|
||||
func (r ManageStructureCreateMappings) GetComposeNamespaceID() uint64 {
|
||||
return r.ComposeNamespaceID
|
||||
}
|
||||
|
||||
// Auditable returns all auditable/loggable parameters
|
||||
func (r ManageStructureCreateMappings) GetFields() types.ModuleFieldMappingSet {
|
||||
return r.Fields
|
||||
@ -447,6 +476,13 @@ func (r *ManageStructureCreateMappings) Fill(req *http.Request) (err error) {
|
||||
}
|
||||
}
|
||||
|
||||
if val, ok := req.Form["composeNamespaceID"]; ok && len(val) > 0 {
|
||||
r.ComposeNamespaceID, err = payload.ParseUint64(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 {
|
||||
|
||||
@ -173,12 +173,15 @@ func (svc exposedModule) Create(ctx context.Context, new *types.ExposedModule) (
|
||||
|
||||
func (svc exposedModule) uniqueCheck(ctx context.Context, m *types.ExposedModule) (err error) {
|
||||
f := types.ExposedModuleFilter{
|
||||
NodeID: m.NodeID,
|
||||
ComposeModuleID: m.ComposeModuleID,
|
||||
NodeID: m.NodeID,
|
||||
ComposeModuleID: m.ComposeModuleID,
|
||||
ComposeNamespaceID: m.ComposeNamespaceID,
|
||||
}
|
||||
|
||||
if set, _, err := store.SearchFederationExposedModules(ctx, svc.store, f); len(set) > 0 && err != nil {
|
||||
if set, _, err := store.SearchFederationExposedModules(ctx, svc.store, f); len(set) > 0 && err == nil {
|
||||
return ExposedModuleErrNotUnique()
|
||||
} else if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
@ -3,6 +3,7 @@ package service
|
||||
import (
|
||||
"context"
|
||||
|
||||
composeService "github.com/cortezaproject/corteza-server/compose/service"
|
||||
"github.com/cortezaproject/corteza-server/federation/types"
|
||||
"github.com/cortezaproject/corteza-server/pkg/actionlog"
|
||||
"github.com/cortezaproject/corteza-server/store"
|
||||
@ -12,6 +13,7 @@ type (
|
||||
moduleMapping struct {
|
||||
ctx context.Context
|
||||
store store.Storer
|
||||
compose composeService.ModuleService
|
||||
actionlog actionlog.Recorder
|
||||
}
|
||||
|
||||
@ -30,6 +32,7 @@ func ModuleMapping() ModuleMappingService {
|
||||
return &moduleMapping{
|
||||
ctx: context.Background(),
|
||||
store: DefaultStore,
|
||||
compose: composeService.Module(),
|
||||
actionlog: DefaultActionlog,
|
||||
}
|
||||
}
|
||||
@ -131,10 +134,13 @@ func (svc moduleMapping) uniqueCheck(ctx context.Context, m *types.ModuleMapping
|
||||
f := types.ModuleMappingFilter{
|
||||
FederationModuleID: m.FederationModuleID,
|
||||
ComposeModuleID: m.ComposeModuleID,
|
||||
ComposeNamespaceID: m.ComposeNamespaceID,
|
||||
}
|
||||
|
||||
if set, _, err := store.SearchFederationModuleMappings(ctx, svc.store, f); len(set) > 0 && err == nil {
|
||||
return ModuleMappingErrModuleMappingExists()
|
||||
} else if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return err
|
||||
|
||||
@ -22,6 +22,7 @@ type (
|
||||
Find(ctx context.Context, filter types.SharedModuleFilter) (types.SharedModuleSet, types.SharedModuleFilter, error)
|
||||
FindByID(ctx context.Context, nodeID uint64, moduleID uint64) (*types.SharedModule, error)
|
||||
FindByAny(ctx context.Context, nodeID uint64, identifier interface{}) (*types.SharedModule, error)
|
||||
Create(ctx context.Context, new *types.SharedModule) (*types.SharedModule, error)
|
||||
// DeleteByID(ctx context.Context, nodeID, moduleID uint64) error
|
||||
}
|
||||
|
||||
@ -70,6 +71,62 @@ func (svc sharedModule) FindByID(ctx context.Context, nodeID uint64, moduleID ui
|
||||
return module, err
|
||||
}
|
||||
|
||||
func (svc sharedModule) Create(ctx context.Context, new *types.SharedModule) (*types.SharedModule, error) {
|
||||
var (
|
||||
aProps = &sharedModuleActionProps{changed: new}
|
||||
)
|
||||
|
||||
err := store.Tx(ctx, svc.store, func(ctx context.Context, s store.Storer) (err error) {
|
||||
// TODO
|
||||
// if !svc.ac.CanCreateFederationExposedModule(ctx, ns) {
|
||||
// return ExposedModuleErrNotAllowedToCreate()
|
||||
// }
|
||||
|
||||
// TODO - fetch Node
|
||||
aProps.setNode(nil)
|
||||
|
||||
// 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
|
||||
new.DeletedAt = nil
|
||||
|
||||
// check if Fields can be unmarshaled to the fields structure
|
||||
if new.Fields != nil {
|
||||
}
|
||||
|
||||
aProps.setModule(new)
|
||||
|
||||
if err = store.CreateFederationSharedModule(ctx, s, new); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
return new, svc.recordAction(ctx, aProps, SharedModuleActionCreate, err)
|
||||
}
|
||||
|
||||
func (svc sharedModule) uniqueCheck(ctx context.Context, m *types.SharedModule) (err error) {
|
||||
f := types.SharedModuleFilter{
|
||||
NodeID: m.NodeID,
|
||||
Handle: m.Handle,
|
||||
Name: m.Name,
|
||||
}
|
||||
|
||||
if set, _, err := store.SearchFederationSharedModules(ctx, svc.store, f); len(set) > 0 && err == nil {
|
||||
return SharedModuleErrNotUnique()
|
||||
} else if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// func (svc sharedModule) DeleteByID(ctx context.Context, nodeID, moduleID uint64) error {
|
||||
// return trim1st(svc.updater(ctx, nodeID, moduleID, ModuleActionDelete, svc.handleDelete))
|
||||
// }
|
||||
|
||||
@ -593,6 +593,36 @@ func SharedModuleErrStaleData(props ...*sharedModuleActionProps) *sharedModuleEr
|
||||
|
||||
}
|
||||
|
||||
// SharedModuleErrNotUnique returns "federation:shared_module.notUnique" audit event as actionlog.Warning
|
||||
//
|
||||
//
|
||||
// This function is auto-generated.
|
||||
//
|
||||
func SharedModuleErrNotUnique(props ...*sharedModuleActionProps) *sharedModuleError {
|
||||
var e = &sharedModuleError{
|
||||
timestamp: time.Now(),
|
||||
resource: "federation:shared_module",
|
||||
error: "notUnique",
|
||||
action: "error",
|
||||
message: "node not unique",
|
||||
log: "used duplicate node TODO",
|
||||
severity: actionlog.Warning,
|
||||
props: func() *sharedModuleActionProps {
|
||||
if len(props) > 0 {
|
||||
return props[0]
|
||||
}
|
||||
return nil
|
||||
}(),
|
||||
}
|
||||
|
||||
if len(props) > 0 {
|
||||
e.props = props[0]
|
||||
}
|
||||
|
||||
return e
|
||||
|
||||
}
|
||||
|
||||
// SharedModuleErrNotAllowedToRead returns "federation:shared_module.notAllowedToRead" audit event as actionlog.Error
|
||||
//
|
||||
//
|
||||
|
||||
@ -60,6 +60,11 @@ errors:
|
||||
message: "stale data"
|
||||
severity: warning
|
||||
|
||||
- error: notUnique
|
||||
message: "node not unique"
|
||||
log: "used duplicate node TODO"
|
||||
severity: warning
|
||||
|
||||
- error: notAllowedToRead
|
||||
message: "not allowed to read this module"
|
||||
log: "could not read {module}; insufficient permissions"
|
||||
|
||||
@ -8,10 +8,11 @@ import (
|
||||
|
||||
type (
|
||||
ExposedModule struct {
|
||||
ID uint64 `json:"moduleID,string"`
|
||||
NodeID uint64 `json:"nodeID,string"`
|
||||
ComposeModuleID uint64 `json:"composeModuleID,string"`
|
||||
Fields ModuleFieldSet `json:"fields"`
|
||||
ID uint64 `json:"moduleID,string"`
|
||||
NodeID uint64 `json:"nodeID,string"`
|
||||
ComposeModuleID uint64 `json:"composeModuleID,string"`
|
||||
ComposeNamespaceID uint64 `json:"composeNamespaceID,string"`
|
||||
Fields ModuleFieldSet `json:"fields"`
|
||||
|
||||
CreatedAt time.Time `json:"createdAt,omitempty"`
|
||||
UpdatedAt *time.Time `json:"updatedAt,omitempty"`
|
||||
@ -19,9 +20,10 @@ type (
|
||||
}
|
||||
|
||||
ExposedModuleFilter struct {
|
||||
NodeID uint64 `json:"node"`
|
||||
ComposeModuleID uint64 `json:"composeModuleID"`
|
||||
Query string `json:"query"`
|
||||
NodeID uint64 `json:"node"`
|
||||
ComposeModuleID uint64 `json:"composeModuleID"`
|
||||
ComposeNamespaceID uint64 `json:"composeNamespaceID"`
|
||||
Query string `json:"query"`
|
||||
|
||||
Check func(*ExposedModule) (bool, error) `json:"-"`
|
||||
|
||||
|
||||
@ -8,11 +8,13 @@ type (
|
||||
ModuleMapping struct {
|
||||
FederationModuleID uint64 `json:"federationModuleID,string"`
|
||||
ComposeModuleID uint64 `json:"composeModuleID,string"`
|
||||
ComposeNamespaceID uint64 `json:"composeNamespaceID,string"`
|
||||
FieldMapping ModuleFieldMappingSet `json:"fields"`
|
||||
}
|
||||
|
||||
ModuleMappingFilter struct {
|
||||
ComposeModuleID uint64 `json:"composeModuleID"`
|
||||
ComposeNamespaceID uint64 `json:"composeNamespaceID"`
|
||||
FederationModuleID uint64 `json:"federationModuleID"`
|
||||
Query string `json:"query"`
|
||||
|
||||
|
||||
@ -8,6 +8,7 @@ fields:
|
||||
- { field: ID }
|
||||
- { field: NodeID }
|
||||
- { field: ComposeModuleID }
|
||||
- { field: ComposeNamespaceID }
|
||||
- { field: Fields, type: "json.Text" }
|
||||
- { field: CreatedAt, sortable: true }
|
||||
- { field: UpdatedAt, sortable: true }
|
||||
|
||||
@ -16,7 +16,7 @@ import (
|
||||
type (
|
||||
FederationModuleMappings interface {
|
||||
SearchFederationModuleMappings(ctx context.Context, f types.ModuleMappingFilter) (types.ModuleMappingSet, types.ModuleMappingFilter, error)
|
||||
LookupFederationModuleMappingByFederationModuleIDComposeModuleID(ctx context.Context, federation_module_id uint64, compose_module_id uint64) (*types.ModuleMapping, error)
|
||||
LookupFederationModuleMappingByFederationModuleIDComposeModuleIDComposeNamespaceID(ctx context.Context, federation_module_id uint64, compose_module_id uint64, compose_namespace_id uint64) (*types.ModuleMapping, error)
|
||||
LookupFederationModuleMappingByFederationModuleID(ctx context.Context, federation_module_id uint64) (*types.ModuleMapping, error)
|
||||
|
||||
CreateFederationModuleMapping(ctx context.Context, rr ...*types.ModuleMapping) error
|
||||
@ -26,7 +26,7 @@ type (
|
||||
UpsertFederationModuleMapping(ctx context.Context, rr ...*types.ModuleMapping) error
|
||||
|
||||
DeleteFederationModuleMapping(ctx context.Context, rr ...*types.ModuleMapping) error
|
||||
DeleteFederationModuleMappingByFederationModuleIDComposeModuleID(ctx context.Context, federationModuleID uint64, composeModuleID uint64) error
|
||||
DeleteFederationModuleMappingByFederationModuleIDComposeModuleIDComposeNamespaceID(ctx context.Context, federationModuleID uint64, composeModuleID uint64, composeNamespaceID uint64) error
|
||||
|
||||
TruncateFederationModuleMappings(ctx context.Context) error
|
||||
}
|
||||
@ -40,11 +40,11 @@ func SearchFederationModuleMappings(ctx context.Context, s FederationModuleMappi
|
||||
return s.SearchFederationModuleMappings(ctx, f)
|
||||
}
|
||||
|
||||
// LookupFederationModuleMappingByFederationModuleIDComposeModuleID searches for module mapping by federation module id and compose module id
|
||||
// LookupFederationModuleMappingByFederationModuleIDComposeModuleIDComposeNamespaceID searches for module mapping by federation module id and compose module id
|
||||
//
|
||||
// It returns module mapping
|
||||
func LookupFederationModuleMappingByFederationModuleIDComposeModuleID(ctx context.Context, s FederationModuleMappings, federation_module_id uint64, compose_module_id uint64) (*types.ModuleMapping, error) {
|
||||
return s.LookupFederationModuleMappingByFederationModuleIDComposeModuleID(ctx, federation_module_id, compose_module_id)
|
||||
func LookupFederationModuleMappingByFederationModuleIDComposeModuleIDComposeNamespaceID(ctx context.Context, s FederationModuleMappings, federation_module_id uint64, compose_module_id uint64, compose_namespace_id uint64) (*types.ModuleMapping, error) {
|
||||
return s.LookupFederationModuleMappingByFederationModuleIDComposeModuleIDComposeNamespaceID(ctx, federation_module_id, compose_module_id, compose_namespace_id)
|
||||
}
|
||||
|
||||
// LookupFederationModuleMappingByFederationModuleID searches for module mapping by federation module id
|
||||
@ -74,9 +74,9 @@ func DeleteFederationModuleMapping(ctx context.Context, s FederationModuleMappin
|
||||
return s.DeleteFederationModuleMapping(ctx, rr...)
|
||||
}
|
||||
|
||||
// DeleteFederationModuleMappingByFederationModuleIDComposeModuleID Deletes FederationModuleMapping from store
|
||||
func DeleteFederationModuleMappingByFederationModuleIDComposeModuleID(ctx context.Context, s FederationModuleMappings, federationModuleID uint64, composeModuleID uint64) error {
|
||||
return s.DeleteFederationModuleMappingByFederationModuleIDComposeModuleID(ctx, federationModuleID, composeModuleID)
|
||||
// DeleteFederationModuleMappingByFederationModuleIDComposeModuleIDComposeNamespaceID Deletes FederationModuleMapping from store
|
||||
func DeleteFederationModuleMappingByFederationModuleIDComposeModuleIDComposeNamespaceID(ctx context.Context, s FederationModuleMappings, federationModuleID uint64, composeModuleID uint64, composeNamespaceID uint64) error {
|
||||
return s.DeleteFederationModuleMappingByFederationModuleIDComposeModuleIDComposeNamespaceID(ctx, federationModuleID, composeModuleID, composeNamespaceID)
|
||||
}
|
||||
|
||||
// TruncateFederationModuleMappings Deletes all FederationModuleMappings from store
|
||||
|
||||
@ -5,12 +5,13 @@ types:
|
||||
type: types.ModuleMapping
|
||||
|
||||
fields:
|
||||
- { field: FederationModuleID, isPrimaryKey: true }
|
||||
- { field: ComposeModuleID, isPrimaryKey: true }
|
||||
- { field: FederationModuleID, isPrimaryKey: true, sortable: true }
|
||||
- { field: ComposeModuleID, isPrimaryKey: true, sortable: true }
|
||||
- { field: ComposeNamespaceID, isPrimaryKey: true, sortable: true }
|
||||
- { field: FieldMapping, type: "json.Text" }
|
||||
|
||||
lookups:
|
||||
- fields: [FederationModuleID, ComposeModuleID]
|
||||
- fields: [FederationModuleID, ComposeModuleID, ComposeNamespaceID]
|
||||
description: |-
|
||||
searches for module mapping by federation module id and compose module id
|
||||
|
||||
@ -28,4 +29,5 @@ rdbms:
|
||||
mapFields:
|
||||
FederationModuleID: { column: rel_federation_module }
|
||||
ComposeModuleID: { column: rel_compose_module }
|
||||
ComposeNamespaceID: { column: rel_compose_namespace }
|
||||
FieldMapping: { column: field_mapping }
|
||||
|
||||
@ -377,6 +377,7 @@ func (s Store) internalFederationExposedModuleRowScanner(row rowScanner) (res *t
|
||||
&res.ID,
|
||||
&res.NodeID,
|
||||
&res.ComposeModuleID,
|
||||
&res.ComposeNamespaceID,
|
||||
&res.Fields,
|
||||
&res.CreatedAt,
|
||||
&res.UpdatedAt,
|
||||
@ -423,6 +424,7 @@ func (Store) federationExposedModuleColumns(aa ...string) []string {
|
||||
alias + "id",
|
||||
alias + "rel_node",
|
||||
alias + "rel_compose_module",
|
||||
alias + "rel_compose_namespace",
|
||||
alias + "fields",
|
||||
alias + "created_at",
|
||||
alias + "updated_at",
|
||||
@ -450,13 +452,14 @@ func (Store) sortableFederationExposedModuleColumns() []string {
|
||||
// func when rdbms.customEncoder=true
|
||||
func (s Store) internalFederationExposedModuleEncoder(res *types.ExposedModule) store.Payload {
|
||||
return store.Payload{
|
||||
"id": res.ID,
|
||||
"rel_node": res.NodeID,
|
||||
"rel_compose_module": res.ComposeModuleID,
|
||||
"fields": res.Fields,
|
||||
"created_at": res.CreatedAt,
|
||||
"updated_at": res.UpdatedAt,
|
||||
"deleted_at": res.DeletedAt,
|
||||
"id": res.ID,
|
||||
"rel_node": res.NodeID,
|
||||
"rel_compose_module": res.ComposeModuleID,
|
||||
"rel_compose_namespace": res.ComposeNamespaceID,
|
||||
"fields": res.Fields,
|
||||
"created_at": res.CreatedAt,
|
||||
"updated_at": res.UpdatedAt,
|
||||
"deleted_at": res.DeletedAt,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -14,6 +14,14 @@ func (s Store) convertFederationExposedModuleFilter(f types.ExposedModuleFilter)
|
||||
query = query.Where("cmd.rel_node = ?", f.NodeID)
|
||||
}
|
||||
|
||||
if f.ComposeModuleID > 0 {
|
||||
query = query.Where("cmd.rel_compose_module = ?", f.ComposeModuleID)
|
||||
}
|
||||
|
||||
if f.ComposeNamespaceID > 0 {
|
||||
query = query.Where("cmd.rel_compose_namespace = ?", f.ComposeNamespaceID)
|
||||
}
|
||||
|
||||
// if f.Query != "" {
|
||||
// q := "%" + strings.ToLower(f.Query) + "%"
|
||||
// query = query.Where(squirrel.Or{
|
||||
|
||||
@ -115,6 +115,10 @@ func (s Store) fetchFullPageOfFederationModuleMappings(
|
||||
sort = append(sort, &filter.SortExpr{Column: "rel_compose_module"})
|
||||
}
|
||||
|
||||
if sort.Get("rel_compose_namespace") == nil {
|
||||
sort = append(sort, &filter.SortExpr{Column: "rel_compose_namespace"})
|
||||
}
|
||||
|
||||
// Apply sorting expr from filter to query
|
||||
if q, err = setOrderBy(q, sort, s.sortableFederationModuleMappingColumns()...); err != nil {
|
||||
return nil, err
|
||||
@ -222,13 +226,14 @@ func (s Store) QueryFederationModuleMappings(
|
||||
return set, fetched, res, rows.Err()
|
||||
}
|
||||
|
||||
// LookupFederationModuleMappingByFederationModuleIDComposeModuleID searches for module mapping by federation module id and compose module id
|
||||
// LookupFederationModuleMappingByFederationModuleIDComposeModuleIDComposeNamespaceID searches for module mapping by federation module id and compose module id
|
||||
//
|
||||
// It returns module mapping
|
||||
func (s Store) LookupFederationModuleMappingByFederationModuleIDComposeModuleID(ctx context.Context, federation_module_id uint64, compose_module_id uint64) (*types.ModuleMapping, error) {
|
||||
func (s Store) LookupFederationModuleMappingByFederationModuleIDComposeModuleIDComposeNamespaceID(ctx context.Context, federation_module_id uint64, compose_module_id uint64, compose_namespace_id uint64) (*types.ModuleMapping, error) {
|
||||
return s.execLookupFederationModuleMapping(ctx, squirrel.Eq{
|
||||
s.preprocessColumn("cmd.rel_federation_module", ""): s.preprocessValue(federation_module_id, ""),
|
||||
s.preprocessColumn("cmd.rel_compose_module", ""): s.preprocessValue(compose_module_id, ""),
|
||||
s.preprocessColumn("cmd.rel_compose_namespace", ""): s.preprocessValue(compose_namespace_id, ""),
|
||||
})
|
||||
}
|
||||
|
||||
@ -274,9 +279,9 @@ func (s Store) partialFederationModuleMappingUpdate(ctx context.Context, onlyCol
|
||||
err = s.execUpdateFederationModuleMappings(
|
||||
ctx,
|
||||
squirrel.Eq{
|
||||
s.preprocessColumn("cmd.rel_federation_module", ""): s.preprocessValue(res.FederationModuleID, ""), s.preprocessColumn("cmd.rel_compose_module", ""): s.preprocessValue(res.ComposeModuleID, ""),
|
||||
s.preprocessColumn("cmd.rel_federation_module", ""): s.preprocessValue(res.FederationModuleID, ""), s.preprocessColumn("cmd.rel_compose_module", ""): s.preprocessValue(res.ComposeModuleID, ""), s.preprocessColumn("cmd.rel_compose_namespace", ""): s.preprocessValue(res.ComposeNamespaceID, ""),
|
||||
},
|
||||
s.internalFederationModuleMappingEncoder(res).Skip("rel_federation_module", "rel_compose_module").Only(onlyColumns...))
|
||||
s.internalFederationModuleMappingEncoder(res).Skip("rel_federation_module", "rel_compose_module", "rel_compose_namespace").Only(onlyColumns...))
|
||||
if err != nil {
|
||||
return s.config.ErrorHandler(err)
|
||||
}
|
||||
@ -307,7 +312,7 @@ func (s Store) DeleteFederationModuleMapping(ctx context.Context, rr ...*types.M
|
||||
for _, res := range rr {
|
||||
|
||||
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, ""),
|
||||
s.preprocessColumn("cmd.rel_federation_module", ""): s.preprocessValue(res.FederationModuleID, ""), s.preprocessColumn("cmd.rel_compose_module", ""): s.preprocessValue(res.ComposeModuleID, ""), s.preprocessColumn("cmd.rel_compose_namespace", ""): s.preprocessValue(res.ComposeNamespaceID, ""),
|
||||
})
|
||||
if err != nil {
|
||||
return s.config.ErrorHandler(err)
|
||||
@ -317,11 +322,12 @@ func (s Store) DeleteFederationModuleMapping(ctx context.Context, rr ...*types.M
|
||||
return nil
|
||||
}
|
||||
|
||||
// DeleteFederationModuleMappingByFederationModuleIDComposeModuleID Deletes row from the federation_module_mapping table
|
||||
func (s Store) DeleteFederationModuleMappingByFederationModuleIDComposeModuleID(ctx context.Context, federationModuleID uint64, composeModuleID uint64) error {
|
||||
// DeleteFederationModuleMappingByFederationModuleIDComposeModuleIDComposeNamespaceID Deletes row from the federation_module_mapping table
|
||||
func (s Store) DeleteFederationModuleMappingByFederationModuleIDComposeModuleIDComposeNamespaceID(ctx context.Context, federationModuleID uint64, composeModuleID uint64, composeNamespaceID 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, ""),
|
||||
s.preprocessColumn("cmd.rel_compose_namespace", ""): s.preprocessValue(composeNamespaceID, ""),
|
||||
})
|
||||
}
|
||||
|
||||
@ -368,6 +374,7 @@ func (s Store) execUpsertFederationModuleMappings(ctx context.Context, set store
|
||||
set,
|
||||
"rel_federation_module",
|
||||
"rel_compose_module",
|
||||
"rel_compose_namespace",
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
@ -392,6 +399,7 @@ func (s Store) internalFederationModuleMappingRowScanner(row rowScanner) (res *t
|
||||
err = row.Scan(
|
||||
&res.FederationModuleID,
|
||||
&res.ComposeModuleID,
|
||||
&res.ComposeNamespaceID,
|
||||
&res.FieldMapping,
|
||||
)
|
||||
}
|
||||
@ -434,6 +442,7 @@ func (Store) federationModuleMappingColumns(aa ...string) []string {
|
||||
return []string{
|
||||
alias + "rel_federation_module",
|
||||
alias + "rel_compose_module",
|
||||
alias + "rel_compose_namespace",
|
||||
alias + "field_mapping",
|
||||
}
|
||||
}
|
||||
@ -444,7 +453,11 @@ func (Store) federationModuleMappingColumns(aa ...string) []string {
|
||||
//
|
||||
// With optional string arg, all columns are returned aliased
|
||||
func (Store) sortableFederationModuleMappingColumns() []string {
|
||||
return []string{}
|
||||
return []string{
|
||||
"rel_federation_module",
|
||||
"rel_compose_module",
|
||||
"rel_compose_namespace",
|
||||
}
|
||||
}
|
||||
|
||||
// internalFederationModuleMappingEncoder encodes fields from types.ModuleMapping to store.Payload (map)
|
||||
@ -455,6 +468,7 @@ func (s Store) internalFederationModuleMappingEncoder(res *types.ModuleMapping)
|
||||
return store.Payload{
|
||||
"rel_federation_module": res.FederationModuleID,
|
||||
"rel_compose_module": res.ComposeModuleID,
|
||||
"rel_compose_namespace": res.ComposeNamespaceID,
|
||||
"field_mapping": res.FieldMapping,
|
||||
}
|
||||
}
|
||||
@ -480,6 +494,8 @@ func (s Store) collectFederationModuleMappingCursorValues(res *types.ModuleMappi
|
||||
|
||||
pkRel_compose_module bool
|
||||
|
||||
pkRel_compose_namespace bool
|
||||
|
||||
collect = func(cc ...string) {
|
||||
for _, c := range cc {
|
||||
switch c {
|
||||
@ -491,6 +507,10 @@ func (s Store) collectFederationModuleMappingCursorValues(res *types.ModuleMappi
|
||||
cursor.Set(c, res.ComposeModuleID, false)
|
||||
|
||||
pkRel_compose_module = true
|
||||
case "rel_compose_namespace":
|
||||
cursor.Set(c, res.ComposeNamespaceID, false)
|
||||
|
||||
pkRel_compose_namespace = true
|
||||
|
||||
}
|
||||
}
|
||||
@ -498,8 +518,8 @@ func (s Store) collectFederationModuleMappingCursorValues(res *types.ModuleMappi
|
||||
)
|
||||
|
||||
collect(cc...)
|
||||
if !hasUnique || !(pkRel_federation_module && pkRel_compose_module && true) {
|
||||
collect("rel_federation_module", "rel_compose_module")
|
||||
if !hasUnique || !(pkRel_federation_module && pkRel_compose_module && pkRel_compose_namespace && true) {
|
||||
collect("rel_federation_module", "rel_compose_module", "rel_compose_namespace")
|
||||
}
|
||||
|
||||
return cursor
|
||||
|
||||
@ -16,5 +16,9 @@ func (s Store) convertFederationModuleMappingFilter(f types.ModuleMappingFilter)
|
||||
query = query.Where("cmd.rel_federation_module = ?", f.FederationModuleID)
|
||||
}
|
||||
|
||||
if f.ComposeNamespaceID > 0 {
|
||||
query = query.Where("cmd.rel_compose_namespace = ?", f.ComposeNamespaceID)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
@ -16,6 +16,14 @@ func (s Store) convertFederationSharedModuleFilter(f types.SharedModuleFilter) (
|
||||
query = query.Where("cmd.rel_node = ?", f.NodeID)
|
||||
}
|
||||
|
||||
if f.Handle != "" {
|
||||
query = query.Where("cmd.handle = ?", f.Handle)
|
||||
}
|
||||
|
||||
if f.Name != "" {
|
||||
query = query.Where("cmd.name = ?", f.Name)
|
||||
}
|
||||
|
||||
if f.Query != "" {
|
||||
q := "%" + strings.ToLower(f.Query) + "%"
|
||||
query = query.Where(squirrel.Or{
|
||||
|
||||
@ -509,21 +509,22 @@ func (Schema) FederationModuleExposed() *Table {
|
||||
ID,
|
||||
ColumnDef("rel_node", ColumnTypeIdentifier),
|
||||
ColumnDef("rel_compose_module", ColumnTypeIdentifier),
|
||||
ColumnDef("rel_compose_namespace", ColumnTypeIdentifier),
|
||||
ColumnDef("fields", ColumnTypeText),
|
||||
CUDTimestamps,
|
||||
|
||||
AddIndex("unique_node_composemodule", IColumn("rel_node", "rel_compose_module")),
|
||||
AddIndex("unique_node_compose_module", IColumn("rel_node", "rel_compose_module", "rel_compose_namespace")),
|
||||
)
|
||||
}
|
||||
|
||||
func (Schema) FederationModuleMapping() *Table {
|
||||
return TableDef("federation_module_mapping",
|
||||
ID,
|
||||
ColumnDef("rel_federation_module", ColumnTypeIdentifier),
|
||||
ColumnDef("rel_compose_module", ColumnTypeIdentifier),
|
||||
ColumnDef("rel_compose_namespace", ColumnTypeIdentifier),
|
||||
ColumnDef("field_mapping", ColumnTypeText),
|
||||
|
||||
AddIndex("unique_federationmodule_composemodule", IColumn("rel_federation_module", "rel_compose_module")),
|
||||
AddIndex("unique_federation_module_compose_module", IColumn("rel_federation_module", "rel_compose_module", "rel_compose_namespace")),
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user