Reworked tree
This commit is contained in:
parent
c0255fadb8
commit
a6bb845c9d
9 changed files with 314 additions and 117 deletions
47
node.go
47
node.go
|
|
@ -2,6 +2,7 @@ package main
|
|||
|
||||
import (
|
||||
// External
|
||||
werr "git.gibonuddevalla.se/go/wrappederror"
|
||||
"github.com/jmoiron/sqlx"
|
||||
|
||||
// Standard
|
||||
|
|
@ -49,26 +50,30 @@ func GetNode(nodeID int) (node Node, err error) {
|
|||
|
||||
err = row.StructScan(&node)
|
||||
if err != nil {
|
||||
err = werr.Wrap(err)
|
||||
return
|
||||
}
|
||||
|
||||
err = json.Unmarshal(node.TypeSchemaRaw, &node.TypeSchema)
|
||||
if err != nil {
|
||||
err = werr.Wrap(err)
|
||||
return
|
||||
}
|
||||
|
||||
err = json.Unmarshal(node.DataRaw, &node.Data)
|
||||
if err != nil {
|
||||
err = werr.Wrap(err)
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func GetNodeTree(startNodeID, maxDepth int) (topNode *Node, err error) {
|
||||
func GetNodeTree(startNodeID, maxDepth int) (topNode *Node, err error) {// {{{
|
||||
nodes := make(map[int]*Node)
|
||||
var rows *sqlx.Rows
|
||||
rows, err = GetNodeRows(startNodeID, maxDepth)
|
||||
if err != nil {
|
||||
err = werr.Wrap(err)
|
||||
return
|
||||
}
|
||||
defer rows.Close()
|
||||
|
|
@ -78,6 +83,7 @@ func GetNodeTree(startNodeID, maxDepth int) (topNode *Node, err error) {
|
|||
var node Node
|
||||
err = rows.StructScan(&node)
|
||||
if err != nil {
|
||||
err = werr.Wrap(err)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -90,9 +96,8 @@ func GetNodeTree(startNodeID, maxDepth int) (topNode *Node, err error) {
|
|||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func GetNodeRows(startNodeID, maxDepth int) (rows *sqlx.Rows, err error) {
|
||||
}// }}}
|
||||
func GetNodeRows(startNodeID, maxDepth int) (rows *sqlx.Rows, err error) {// {{{
|
||||
rows, err = db.Queryx(`
|
||||
WITH RECURSIVE nodes AS (
|
||||
SELECT
|
||||
|
|
@ -141,10 +146,14 @@ func GetNodeRows(startNodeID, maxDepth int) (rows *sqlx.Rows, err error) {
|
|||
startNodeID,
|
||||
maxDepth,
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
func ComposeTree(nodes map[int]*Node, node *Node) {
|
||||
if err != nil {
|
||||
err = werr.Wrap(err)
|
||||
}
|
||||
|
||||
return
|
||||
}// }}}
|
||||
func ComposeTree(nodes map[int]*Node, node *Node) {// {{{
|
||||
if node.Children == nil {
|
||||
node.Children = []*Node{}
|
||||
}
|
||||
|
|
@ -159,15 +168,24 @@ func ComposeTree(nodes map[int]*Node, node *Node) {
|
|||
}
|
||||
|
||||
nodes[node.ID] = node
|
||||
}
|
||||
}// }}}
|
||||
|
||||
func UpdateNode(nodeID int, data []byte) (err error) {
|
||||
func UpdateNode(nodeID int, data []byte) (err error) {// {{{
|
||||
_, err = db.Exec(`UPDATE public.node SET data=$2 WHERE id=$1`, nodeID, data)
|
||||
return
|
||||
}
|
||||
}// }}}
|
||||
func RenameNode(nodeID int, name string) (err error) {// {{{
|
||||
_, err = db.Exec(`UPDATE node SET name=$2 WHERE id=$1`, nodeID, name)
|
||||
return
|
||||
}// }}}
|
||||
|
||||
func CreateNode(parentNodeID, typeID int, name string) (err error) {
|
||||
j, _ := json.Marshal(struct { Name string }{name})
|
||||
func CreateNode(parentNodeID, typeID int, name string) (err error) {// {{{
|
||||
j, _ := json.Marshal(
|
||||
struct {
|
||||
New bool `json:"x-new"`
|
||||
}{
|
||||
true,
|
||||
})
|
||||
|
||||
row := db.QueryRow(`
|
||||
INSERT INTO node(type_id, name, data)
|
||||
|
|
@ -179,10 +197,13 @@ func CreateNode(parentNodeID, typeID int, name string) (err error) {
|
|||
var id int
|
||||
err = row.Scan(&id)
|
||||
if err != nil {
|
||||
err = werr.Wrap(err)
|
||||
return
|
||||
}
|
||||
|
||||
_, err = db.Exec(`INSERT INTO connection("parent", "child") VALUES($1, $2)`, parentNodeID, id)
|
||||
|
||||
return
|
||||
}
|
||||
}// }}}
|
||||
|
||||
// vim: foldmethod=marker
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue