Reworked tree

This commit is contained in:
Magnus Åhall 2025-07-04 16:40:13 +02:00
parent c0255fadb8
commit a6bb845c9d
9 changed files with 314 additions and 117 deletions

47
node.go
View file

@ -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