This repository has been archived on 2025-05-15. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
synchronizator-go/pkg/synchronizator.go

69 lines
1.3 KiB
Go

package synchronizator
import (
sql "database/sql"
"fmt"
)
type db struct {
Connection *sql.DB
}
type Node struct {
_class string
metadata any
}
func New(connection *sql.DB) (*db, error) {
conn := db{
Connection: connection,
}
err := conn.bootstrap()
if err != nil {
return nil, err
}
return &conn, nil
}
func (conn *db) bootstrap() error {
fmt.Println("Initializing database...")
_, err := conn.Connection.Exec(`
CREATE TABLE IF NOT EXISTS nodes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
_class text NOT NULL,
metadata jsonb DEFAULT '{}'
);
CREATE INDEX IF NOT EXISTS node_class on nodes (_class);
CREATE TABLE IF NOT EXISTS relationships (
node_from INTEGER NOT NULL,
node_to INTEGER NOT NULL,
_class text NOT NULL,
PRIMARY KEY (node_from, node_to),
CHECK (node_from != node_to),
CONSTRAINT fk_node_from_relationships FOREIGN KEY (node_from) REFERENCES nodes(id),
CONSTRAINT fk_node_to_relationships FOREIGN KEY (node_to) REFERENCES nodes(id)
);
CREATE INDEX IF NOT EXISTS relationships_class on relationships (_class);
`,
)
if err != nil {
return err
}
return nil
}
func (conn *db) NewNode(metadata any) (*Node, error) {
node := Node{metadata: metadata}
return &node, nil
}