change how links work

neo4j-4
Josha von Gizycki 4 years ago
parent 6f18bfe7f8
commit 73a8e5f2b9

@ -1,9 +1,9 @@
(ns wanijo.infrastructure.repl
(:require [buddy.hashers :as hashers]
[neo4j-clj.core :as db]
[wanijo.main :as main]
[wanijo.infrastructure.neo4j :as neo4j]))
(db/defquery create-user
(neo4j/defquery create-user
"CREATE (n:user)
SET n.ident = {ident}
SET n.pw = {pw}
@ -16,7 +16,7 @@
:pw (hashers/derive pw)
:uuid (neo4j/uuid)}))
(db/defquery merge-config
(neo4j/defquery merge-config
"MERGE (c:dbconfig)
ON CREATE SET
c.installed_at = {now},
@ -26,38 +26,38 @@
c.last_migration = {now},
c.db_version = {version}")
(db/defquery config
(neo4j/defquery config
"MATCH (c:dbconfig) RETURN c")
(db/defquery ver-0-schema-uuid
(neo4j/defquery ver-0-schema-uuid
"CREATE CONSTRAINT ON (n:schema)
ASSERT n.uuid IS UNIQUE")
(db/defquery ver-0-attribute-uuid
(neo4j/defquery ver-0-attribute-uuid
"CREATE CONSTRAINT ON (n:attribute)
ASSERT n.uuid IS UNIQUE")
(db/defquery ver-0-instance-uuid
(neo4j/defquery ver-0-instance-uuid
"CREATE CONSTRAINT ON (n:instance)
ASSERT n.uuid IS UNIQUE")
(db/defquery ver-0-property-uuid
(neo4j/defquery ver-0-property-uuid
"CREATE CONSTRAINT ON (n:property)
ASSERT n.uuid IS UNIQUE")
(db/defquery ver-0-user-uuid
(neo4j/defquery ver-0-user-uuid
"CREATE CONSTRAINT ON (n:user)
ASSERT n.uuid IS UNIQUE")
(db/defquery ver-0-link-uuid
(neo4j/defquery ver-0-link-uuid
"CREATE CONSTRAINT ON (n:link)
ASSERT n.uuid IS UNIQUE")
(db/defquery ver-1-tag-name
(neo4j/defquery ver-1-tag-name
"CREATE CONSTRAINT ON (n:tag)
ASSERT n.name IS UNIQUE")
(db/defquery ver-1-tag-uuid
(neo4j/defquery ver-1-tag-uuid
"CREATE CONSTRAINT ON (n:tag)
ASSERT n.uuid IS UNIQUE")
@ -73,9 +73,23 @@
(neo4j/exec-query! ver-1-tag-name {})
(neo4j/exec-query! ver-1-tag-uuid {}))
(neo4j/defquery migrate-links
"MATCH (i1:instance)-[:link_from]-(l:link)-[:link_to]-(i2:instance),
(l)-[cb:created_by]->(:user)
MERGE (i1)-[newl:link]->(i2)
ON CREATE SET
newl.name = l.name,
newl.created_at = l.created_at,
newl.uuid = l.uuid
DELETE cb, lf, lt, l")
(defn init-version-2 []
(neo4j/exec-query! migrate-links {}))
(def migrations
[init-version-0
init-version-1])
init-version-1
init-version-2])
(defn run-migrations! []
(neo4j/exec-query! merge-config {:now (neo4j/now-str)
@ -93,3 +107,8 @@
(neo4j/exec-query! merge-config {:now (neo4j/now-str)
:version (count migrations)})
nil)
(defn dev-server! []
(main/stop-server!)
(main/start-server-dev!)
(println "Startet server at http://localhost:8080"))

@ -141,18 +141,12 @@
OPTIONAL MATCH
(p:property)-[pc:of]->(i),
(p)-[pac:of]->(a:attribute)
OPTIONAL MATCH
(i)<-[lt1:link_to]-(ltn:link)-[lt2:link_from]->(),
(ltn)-[ltcb:created_by]->()
OPTIONAL MATCH
(i)<-[lf1:link_from]-(lfn:link)-[lf2:link_to]->(),
(lfn)-[lfcb:created_by]->()
OPTIONAL MATCH
(i)-[tw:tagged_with]->()
OPTIONAL MATCH
(i)-[l:link]-()
DELETE pac, pc, cb, ic, p,
lt1, lt2, ltn, ltcb,
lf1, lf2, lfn, lfcb,
tw, i")
l, tw, i")
(defn delete! [uuid]
(neo4j/exec-query! delete {:uuid uuid}))
@ -171,8 +165,7 @@
(neo4j/defquery outgoing-links
"MATCH (inst:instance {uuid:{uuid}}),
(inst)<-[:link_from]-(link:link),
(link)-[:link_to]->(target:instance),
(inst)-[link:link]->(target:instance),
(target)-[:of]->(schema:schema)
OPTIONAL MATCH
(target)-[:tagged_with]->(tag:tag)
@ -183,8 +176,7 @@
(neo4j/defquery incoming-links
"MATCH (inst:instance {uuid:{uuid}}),
(inst)<-[:link_to]-(link:link),
(link)-[:link_from]->(source:instance),
(inst)<-[link:link]-(source:instance),
(source)-[:of]->(schema:schema)
OPTIONAL MATCH
(source)-[:tagged_with]->(tag:tag)

@ -10,30 +10,28 @@
(neo4j/defquery create
"MATCH (i:instance {uuid:{from}}),
(u:user {uuid:{by}}),
(t:instance {uuid:{target}})
CREATE
(l:link {uuid:{uuid}})-[:created_by]->(u)
SET l.created_at = {created_at},
l.name = {name}
CREATE
(i)<-[:link_from]-(l)-[:link_to]->(t)")
(defn create! [link]
CREATE (i)-[l:link]->(t)
SET l.created_at = {created_at},
l.name = {name},
l.created_by = {by},
l.uuid = {uuid}")
(defn create! [{:keys [from name to by]}]
(let [tuples (map (fn [target-uuid]
[create
{:from (:from link)
:by (:by link)
{:from from
:by by
:target target-uuid
:uuid (neo4j/uuid)
:created_at (neo4j/now-str)
:name (:name link)}])
(:to link))]
:name name}])
to)]
(apply neo4j/exec-queries! tuples)))
(neo4j/defquery delete
"MATCH (l:link {uuid:{uuid}}),
(l)-[r]-()
DELETE r, l")
"MATCH (:instance)-[l:link]-(:instance)
WHERE l.uuid = {uuid}
DELETE l")
(defn delete! [uuid]
(neo4j/exec-query! delete
{:uuid uuid}))

@ -20,7 +20,8 @@
:handler wanijo-handler/dev-app))
(defn stop-server! []
(.stop @server))
(when @server
(.stop @server)))
(defn -main [& args]
(start-server! :port (Integer/valueOf (or (System/getenv "port")

@ -19,7 +19,7 @@
"MATCH
(source:instance)-[:of]->(schema:schema)
OPTIONAL MATCH
(source)<-[:link_from]-(link:link)-[:link_to]->(target:instance),
(source)-[link:link]->(target:instance),
(target)-[:of]->(target_schema:schema)
RETURN source, schema, link, target, target_schema")
(defn all-instance-connections! []

Loading…
Cancel
Save