3
0

Structure sync get node info, list response.

This commit is contained in:
Peter Grlica 2020-10-23 11:56:34 +02:00
parent abcf13b0a3
commit 798e2126f5
11 changed files with 83 additions and 27 deletions

View File

@ -291,14 +291,19 @@ endpoints:
- title: Sync structure
description: Sync structure
entrypoint: syncStructure
path: ""
path: "/nodes/{nodeID}/modules/exposed"
authentication: []
apis:
- name: readExposedAll
method: GET
title: List all exposed modules changes
path: "/exposed/modules/"
path: "/"
parameters:
path:
- type: uint64
name: nodeID
required: true
title: Node ID
get:
- type: string
name: query

View File

@ -58,6 +58,6 @@ func NewSyncStructure(h SyncStructureAPI) *SyncStructure {
func (h SyncStructure) MountRoutes(r chi.Router, middlewares ...func(http.Handler) http.Handler) {
r.Group(func(r chi.Router) {
r.Use(middlewares...)
r.Get("/exposed/modules/", h.ReadExposedAll)
r.Get("/nodes/{nodeID}/modules/exposed/", h.ReadExposedAll)
})
}

View File

@ -30,6 +30,11 @@ var (
type (
// Internal API interface
SyncStructureReadExposedAll struct {
// NodeID PATH parameter
//
// Node ID
NodeID uint64 `json:",string"`
// Query GET parameter
//
// Search query
@ -60,6 +65,7 @@ func NewSyncStructureReadExposedAll() *SyncStructureReadExposedAll {
// Auditable returns all auditable/loggable parameters
func (r SyncStructureReadExposedAll) Auditable() map[string]interface{} {
return map[string]interface{}{
"nodeID": r.NodeID,
"query": r.Query,
"limit": r.Limit,
"pageCursor": r.PageCursor,
@ -67,6 +73,11 @@ func (r SyncStructureReadExposedAll) Auditable() map[string]interface{} {
}
}
// Auditable returns all auditable/loggable parameters
func (r SyncStructureReadExposedAll) GetNodeID() uint64 {
return r.NodeID
}
// Auditable returns all auditable/loggable parameters
func (r SyncStructureReadExposedAll) GetQuery() string {
return r.Query
@ -130,5 +141,17 @@ func (r *SyncStructureReadExposedAll) Fill(req *http.Request) (err error) {
}
}
{
var val string
// path params
val = chi.URLParam(req, "nodeID")
r.NodeID, err = payload.ParseUint64(val), nil
if err != nil {
return err
}
}
return err
}

View File

@ -12,9 +12,9 @@ import (
type (
SyncStructure struct{}
TempStruct struct {
Filter types.ExposedModuleFilter `json:"filter"`
Set types.ExposedModuleSet `json:"set"`
listResponse struct {
Filter *types.ExposedModuleFilter `json:"filter"`
Set *types.ExposedModuleSet `json:"set"`
}
)
@ -23,15 +23,19 @@ func (SyncStructure) New() *SyncStructure {
}
func (ctrl SyncStructure) ReadExposedAll(ctx context.Context, r *request.SyncStructureReadExposedAll) (interface{}, error) {
// TODO - fixed values for now
var (
err error
f = types.ExposedModuleFilter{
NodeID: 276342359342989444,
}
err error
node *types.Node
)
if node, err = service.DefaultNode.FindBySharedNodeID(ctx, r.NodeID); err != nil {
return nil, err
}
f := types.ExposedModuleFilter{
NodeID: node.ID,
}
if f.Paging, err = filter.NewPaging(r.Limit, r.PageCursor); err != nil {
return nil, err
}
@ -42,8 +46,8 @@ func (ctrl SyncStructure) ReadExposedAll(ctx context.Context, r *request.SyncStr
list, f, err := (service.ExposedModule()).Find(context.Background(), f)
return TempStruct{
Set: list,
Filter: f,
}, err
return listResponse{
Set: &list,
Filter: &f,
}, nil
}

View File

@ -12,7 +12,6 @@ import (
type (
exposedModule struct {
ctx context.Context
module composeService.ModuleService
namespace composeService.NamespaceService
store store.Storer
@ -33,7 +32,6 @@ type (
func ExposedModule() ExposedModuleService {
return &exposedModule{
ctx: context.Background(),
module: composeService.DefaultModule,
namespace: composeService.DefaultNamespace,
store: DefaultStore,
@ -211,7 +209,7 @@ func (svc exposedModule) Create(ctx context.Context, new *types.ExposedModule) (
}
if _, err := svc.module.FindByID(new.ComposeNamespaceID, new.ComposeModuleID); err != nil {
return ExposedModuleErrComposeNamespaceNotFound()
return ExposedModuleErrComposeModuleNotFound()
}
// Check for node - compose.Module combo

View File

@ -4,6 +4,11 @@ import (
"context"
"errors"
"fmt"
"net/http"
"net/url"
"strconv"
"strings"
"github.com/cortezaproject/corteza-server/federation/types"
"github.com/cortezaproject/corteza-server/pkg/actionlog"
"github.com/cortezaproject/corteza-server/pkg/auth"
@ -11,10 +16,6 @@ import (
"github.com/cortezaproject/corteza-server/store"
"github.com/cortezaproject/corteza-server/system/service"
sysTypes "github.com/cortezaproject/corteza-server/system/types"
"net/http"
"net/url"
"strconv"
"strings"
)
const (
@ -355,6 +356,10 @@ func (svc node) updater(ctx context.Context, nodeID uint64, action func(...*node
return n, svc.recordAction(ctx, aProps, action, err)
}
func (svc node) FindBySharedNodeID(ctx context.Context, sharedNodeID uint64) (*types.Node, error) {
return svc.store.LookupFederationNodeBySharedNodeID(ctx, sharedNodeID)
}
// Looks for existing user or crates a new one
func (svc node) fetchFederatedUser(ctx context.Context, n *types.Node) (*sysTypes.User, error) {
// Generate handle for user that se this node

View File

@ -40,7 +40,9 @@ var (
DefaultActionlog actionlog.Recorder
DefaultNode *node
DefaultNode *node
DefaultExposedModule ExposedModuleService
DefaultSharedModule SharedModuleService
// wrapper around time.Now() that will aid service testing
now = func() *time.Time {
@ -117,6 +119,8 @@ func Initialize(ctx context.Context, log *zap.Logger, s store.Storer, c Config)
hcd.Add(objstore.Healthcheck(DefaultObjectStore), "Store/Federation")
DefaultNode = Node(DefaultStore, service.DefaultUser, DefaultActionlog, auth.DefaultJwtHandler)
DefaultExposedModule = ExposedModule()
DefaultSharedModule = SharedModule()
return
}

View File

@ -20,9 +20,9 @@ type (
}
ExposedModuleFilter struct {
NodeID uint64 `json:"node"`
ComposeModuleID uint64 `json:"composeModuleID"`
ComposeNamespaceID uint64 `json:"composeNamespaceID"`
NodeID uint64 `json:"nodeID,string"`
ComposeModuleID uint64 `json:"composeModuleID,string"`
ComposeNamespaceID uint64 `json:"composeNamespaceID,string"`
Query string `json:"query"`
Check func(*ExposedModule) (bool, error) `json:"-"`

View File

@ -18,6 +18,7 @@ type (
SearchFederationNodes(ctx context.Context, f types.NodeFilter) (types.NodeSet, types.NodeFilter, error)
LookupFederationNodeByID(ctx context.Context, id uint64) (*types.Node, error)
LookupFederationNodeByBaseURLSharedNodeID(ctx context.Context, base_url string, shared_node_id uint64) (*types.Node, error)
LookupFederationNodeBySharedNodeID(ctx context.Context, shared_node_id uint64) (*types.Node, error)
CreateFederationNode(ctx context.Context, rr ...*types.Node) error
@ -52,6 +53,11 @@ func LookupFederationNodeByBaseURLSharedNodeID(ctx context.Context, s Federation
return s.LookupFederationNodeByBaseURLSharedNodeID(ctx, base_url, shared_node_id)
}
// LookupFederationNodeBySharedNodeID searches for node by shared-node-id
func LookupFederationNodeBySharedNodeID(ctx context.Context, s FederationNodes, shared_node_id uint64) (*types.Node, error) {
return s.LookupFederationNodeBySharedNodeID(ctx, shared_node_id)
}
// CreateFederationNode creates one or more FederationNodes in store
func CreateFederationNode(ctx context.Context, s FederationNodes, rr ...*types.Node) error {
return s.CreateFederationNode(ctx, rr...)

View File

@ -31,6 +31,10 @@ lookups:
description: |-
searches for node by shared-node-id and base-url
- fields: [SharedNodeID]
description: |-
searches for node by shared-node-id
search:
enablePaging: false
enableSorting: false

View File

@ -111,6 +111,13 @@ func (s Store) LookupFederationNodeByBaseURLSharedNodeID(ctx context.Context, ba
})
}
// LookupFederationNodeBySharedNodeID searches for node by shared-node-id
func (s Store) LookupFederationNodeBySharedNodeID(ctx context.Context, shared_node_id uint64) (*types.Node, error) {
return s.execLookupFederationNode(ctx, squirrel.Eq{
s.preprocessColumn("fdn.shared_node_id", ""): store.PreprocessValue(shared_node_id, ""),
})
}
// CreateFederationNode creates one or more rows in federation_nodes table
func (s Store) CreateFederationNode(ctx context.Context, rr ...*types.Node) (err error) {
for _, res := range rr {