Service - GraphNavigation

From Izara Wiki
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

GraphNavigationConfigMain

{
	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}

UsersGraphNavigationConfigs

{
	userId: "xx" // user who owns the GraphNavigationConfig
	graphNavigationConfigId: "xx",
}
  • partition key: userId
  • sort key: graphNavigationConfigId

graphNavigationConfig Object

{
	// 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",
										},					
									]
								},
								// ..
							]
						},
						//...
					],
				},
				//...
			],
		},
		//...
	]
}

Multiple graphNav or elementDetail

  • 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)

Working documents

GraphNavigation