Service - GraphNavigation
Jump to navigation
Jump to search
Overview
Manages configuration and handling of frontend graph navigation (eg forum system)
Repository
https://bitbucket.org/izara-core-shared/izara-core-shared-graphnavigation
DynamoDB tables
{
graphNavigationConfigId: "xx", // {random uuid}
graphNavigationConfig: "xx", // json encoded object of configuration
graphNavigationConfigName: "yy", // user specified name of the config
userId: "xx"
}
- partition key: graphNavigationConfigId
- sort key: {none}
{
userId: "xx" // user who owns the GraphNavigationConfig
graphNavigationConfigId: "xx",
}
- partition key: userId
- sort key: graphNavigationConfigId
{
// grouping/row/cell/elements structure same tableConfig
// add css theme and overwrite settings
// standardize property names to match tableConfig structure (eg elementTypes)
sections: [
{
sectionName: "xx",
groupings: [
{
groupingName: "xx",
rows: [
{
rowName: "xx",
cells: [
{
cellName: "xx",
elements: [
{
// displays the graph
elementType: "graphNav",
focusOnSelected: { //settings how to center viewport to selected element
// eg speed of moving viewport focus
}
objTypes: { // which objectTypes are shown and settings for their display
{serviceTag}: {
{objType}: {
// config for nodes of each objType
// what fields to present, title, label, shape, colour (or css) etc..
// filters
},
//..
},
//..
],
relationshipTags:[ // which relationshipTags are shown and settings for their display
{
relationshipTag: "xx",
// config for each relationship type
// which field sets weight etc
// filters
},
//..
]
},
{
//presents detailed information about the selected element (eg node)
elementType: "elementDetail",
objTypes: { // objectType settings for detailed display
{serviceTag}: {
{objType}: {
formObjectEditConfigId: "xx",
},
//..
},
//..
],
},
{
// present list of relationships for the selected node
elementType: "relationships",
relationshipTags:[ // which relationshipTags are shown and settings for their display
{
relationshipTag: "xx",
// config for each relationship type
// filters
},
//..
]
},
{
elementType: "freeText",
text: "xxx",
},
]
},
// ..
]
},
//...
],
},
//...
],
},
//...
]
}
- One GraphNavigation setup can have multiple graphNav or elementDetail configs showing
- Each has it's own settings so can present the navigation or detail for different uses
RelNode objType
- identifies a single target node and the relationship that connects it to the source node
- in most cases a Relnode will reflect data in a graph database, but could be other storage types
- RelNodeId (unique identifier/dataId) for RelNode must be able to identify one node+relationship pair
- for graph, to identify the node will require the objType (serviceTag_objectType) and identifier values (maybe field=value pairs), and the relationship UUID (relUuid)
- how to combine all these into one string, maybe use Object Schema deliminator code, adding a level for the additional serviceTag_objectType/relUuid fields
InitialNode objType
- Multiple Node initial queries may or may not have relationship based filters, this means results may not include relationship details
- Will be nodes only so cannot use RelNode objType, have a separate ("InitialNode") objType that points to nodes only
- for graph, to identify the node require objType (serviceTag_objectType) and identifier values (maybe field=value pairs)