From f66927965dd319e05160d1fc040af2bfa8ae2965 Mon Sep 17 00:00:00 2001
From: Malte Bauch <malte.bauch@stud.h-da.de>
Date: Wed, 30 Sep 2020 15:09:37 +0200
Subject: [PATCH] database updated for current mock

- added StoreLinks() for the new GetLinks() function in our RESTCONF client.
- updated the queries for the new json format
- removed the function for error handling -> not really go like
- added Shutdown() function
---
 database/database.go            | 62 ++++++++++++++++++++++-----------
 restconf/client/ciena/client.go |  2 +-
 2 files changed, 43 insertions(+), 21 deletions(-)

diff --git a/database/database.go b/database/database.go
index 8186ad873..11e3a543d 100644
--- a/database/database.go
+++ b/database/database.go
@@ -67,7 +67,7 @@ func (d Database) StorePND(pnd *PND) {
 		ON CREATE SET pnd.description = $description,
 			pnd.southboundInterfaces = $southboundInterfaces
 		`
-
+		//refactor map[string]interface... in own function
 	_, err := d.session.Run(
 		query, map[string]interface{}{
 			"name":                 pnd.name,
@@ -75,15 +75,15 @@ func (d Database) StorePND(pnd *PND) {
 			"southboundInterfaces": pnd.southboundInterfaces,
 		})
 
-	logError("failed storing PND into database", err)
+	if err != nil {
+		log.Info("failed storing PND into database:", err)
+	}
 
 	log.Info("successfully added PND into database")
 }
 
 //RemovePND removes the given principle network domain by id.
-func (d Database) RemovePND(id string) {
-
-}
+func (d Database) RemovePND(id string) {}
 
 //StoreNodes stores the given nodes to the database and adds them to a
 //principle networt domain (PND). It is required for a node to belong to a PND.
@@ -98,11 +98,11 @@ func (d Database) StoreNodes(json string) {
 		AS value
 		UNWIND value.data as d
 		MERGE (device:Device {id: d.object_id})
-		ON CREATE SET device.nativeName = d.object_data.name[0].value,
-			device.deviceType = d.object_data.name[1].value,
-			device.serialNumber = d.object_data.name[2].value,
-			device.softwareVersion = d.object_data.name[3].value,
-			device.` + "`operational-state` = d.object_data.`operational-state`" + `
+		ON CREATE SET device.nativeName = d.object_data.` + "`tapi-object-data`.name[0].value," + `
+			device.deviceType = d.object_data.` + "`tapi-object-data`.name[1].value," + `
+			device.serialNumber = d.object_data.` + "`tapi-object-data`.name[2].value," + `
+			device.softwareVersion = d.object_data.` + "`tapi-object-data`.name[3].value," + `
+			device.` + "`operational-state` = d.object_data.`tapi-object-data`.`operational-state`" + `
 		WITH device
 		MATCH (pnd:PND)
 		WHERE pnd.name = $pnd
@@ -128,21 +128,48 @@ func (d Database) RemoveNodes(json string) {}
 //RemoveSingleNode removes the given node and their relationship by id.
 func (d Database) RemoveSingleNode(id string) {}
 
+//StoreLinks stores the links between nodes
+func (d Database) StoreLinks(json string) {
+	query :=
+		`
+		WITH apoc.convert.fromJsonMap($stringToAdd)
+		AS value
+		UNWIND value.data as l
+		MATCH (d:Device), (d2:Device)
+		WHERE d.id = l.object_data.` + "`tapi-object-data`.`node-edge-point`[0].`node-uuid`" + `
+		AND d2.id = l.object_data.` + "`tapi-object-data`.`node-edge-point`[1].`node-uuid`" + `
+		CALL apoc.merge.relationship(d,l.object_data.` + "`tapi-object-data`.`layer-qualifier`,{},{}, d2,{})" + `
+		YIELD rel
+		RETURN rel
+		`
+
+	_, err := d.session.Run(
+		query, map[string]interface{}{
+			"stringToAdd": json,
+		})
+
+	if err != nil {
+		log.Info("failed storing Links into database:", err)
+	}
+
+	log.Info("successfully added Links into database")
+}
+
 //StoreNodeEdgePoints stores the given node edge points (interfaces)
 func (d Database) StoreNodeEdgePoints(json string) {
-	queryEdgePoints :=
+	query :=
 		`
 		WITH apoc.convert.fromJsonMap($stringToAdd)
 		AS value
 		UNWIND value.data as i
 		MERGE (interface:Interface {id: i.object_id})
 		ON CREATE SET interface.object_type =i.object_type,
-		interface.localId = i.object_data.name[0].value,
-		interface.location = i.object_data.name[1].value,
-		interface.` + "`containing-node` = i.object_data.`containing-node`"
+		interface.localId = i.object_data.` + "`tapi-object-data`.name[0].value," + `
+		interface.location = i.object_data.` + "`tapi-object-data`.name[1].value," + `
+		interface.` + "`containing-node` = i.object_data.`tapi-object-data`.`containing-node`"
 
 	_, err := d.session.Run(
-		queryEdgePoints, map[string]interface{}{
+		query, map[string]interface{}{
 			"stringToAdd": json,
 		})
 
@@ -186,9 +213,4 @@ func (d Database) Shutdown() {
 
 	if err := d.driver.Close(); err != nil {
 	}
-
-}
-
-//logError logs error with custom and error message
-func logError(message string, err error) {
 }
diff --git a/restconf/client/ciena/client.go b/restconf/client/ciena/client.go
index a4d09fd94..bb47bbd38 100644
--- a/restconf/client/ciena/client.go
+++ b/restconf/client/ciena/client.go
@@ -60,7 +60,7 @@ func (c *MCPClient) GetConnections() error {
 func (c *MCPClient) GetLinks() error {
 	defer c.buffer.Reset()
 	_, err := c.client.TapiTopologyCore.GetTapiCoreContextTopologyMcpBaseTopologyLink(nil)
-	c.database.StoreConnections(c.buffer.String())
+	c.database.StoreLinks(c.buffer.String())
 	log.Debug(c.buffer.Next(25))
 	return err
 }
-- 
GitLab