From 56ed79acb38236612268cb1a29094847f4123ff4 Mon Sep 17 00:00:00 2001 From: Josha von Gizycki Date: Fri, 9 Nov 2018 14:43:53 +0100 Subject: [PATCH] instance deletion --- src/wanijo/instance/domain.clj | 18 ++++++++++++++---- src/wanijo/instance/routes.clj | 22 ++++++++++++++++------ src/wanijo/instance/view.clj | 5 ++++- src/wanijo/schema/domain.clj | 10 ++++++++++ 4 files changed, 44 insertions(+), 11 deletions(-) diff --git a/src/wanijo/instance/domain.clj b/src/wanijo/instance/domain.clj index 56570f8..fcac3b4 100644 --- a/src/wanijo/instance/domain.clj +++ b/src/wanijo/instance/domain.clj @@ -95,7 +95,6 @@ p.value = {value}") (defn edit! [instance] - (clojure.pprint/pprint instance) (let [prop-tuples (map #(vector edit-property {:uuid (:uuid % (neo4j/uuid)) :now (neo4j/now-str) @@ -105,7 +104,18 @@ (:properties instance))] (apply neo4j/exec-queries! (concat [[edit-instance - {:uuid (:uuid instance) - :name (:name instance) - :updated_at (neo4j/now-str)}]] + {:uuid (:uuid instance) + :name (:name instance) + :updated_at (neo4j/now-str)}]] prop-tuples)))) + +(neo4j/defquery delete + "MATCH (i:instance {uuid:{uuid}}), + (i)-[ic:of]->(s:schema) + OPTIONAL MATCH + (p:property)-[pc:of]->(i), + (p)-[pac:of]->(a:attribute) + DELETE pac, pc, ic, p, i") + +(defn delete! [uuid] + (neo4j/exec-query! delete {:uuid uuid})) diff --git a/src/wanijo/instance/routes.clj b/src/wanijo/instance/routes.clj index 7ad755e..80cb2e5 100644 --- a/src/wanijo/instance/routes.clj +++ b/src/wanijo/instance/routes.clj @@ -63,12 +63,19 @@ (resp/redirect (path :instance-show instance))) (show! uuid req)))) +(defn delete! [uuid req] + (let [schema (domain-schema/find-by-instance! uuid)] + (domain/delete! uuid) + (resp/redirect (path :instance-list + {:schema-uuid (:uuid schema)})))) + (defroutes routes - (wrap-routes (GET (register! :instance-list "/instance/list/:schema-uuid") - [schema-uuid :as req] - (list! schema-uuid req)) - (middleware-schema/wrap-allowed-to-read - #(get-in % [:params :schema-uuid]))) + (wrap-routes + (GET (register! :instance-list "/instance/list/:schema-uuid") + [schema-uuid :as req] + (list! schema-uuid req)) + (let [schema-fn #(get-in % [:params :schema-uuid])] + (middleware-schema/wrap-allowed-to-read schema-fn))) (POST (register! :instance-new "/instance/new") [] new!) (GET (register! :instance-show "/instance/:uuid") @@ -76,4 +83,7 @@ (show! uuid req)) (POST (register! :instance-edit "/instance/:uuid") [uuid :as req] - (edit! uuid req))) + (edit! uuid req)) + (DELETE (register! :instance-delete "/instance/:uuid") + [uuid :as req] + (delete! uuid req))) diff --git a/src/wanijo/instance/view.clj b/src/wanijo/instance/view.clj index e1aa096..4563798 100644 --- a/src/wanijo/instance/view.clj +++ b/src/wanijo/instance/view.clj @@ -41,4 +41,7 @@ [[:h1 (:name instance)] (hform/form-to [:post (path :instance-edit instance)] (form/render-widgets form form-data req) - (hform/submit-button "Edit!"))])) + (hform/submit-button "Edit!")) + (hform/form-to [:delete ""] + (anti-forgery-field) + (view/delete-btn))])) diff --git a/src/wanijo/schema/domain.clj b/src/wanijo/schema/domain.clj index 3c8dce7..2f2070c 100644 --- a/src/wanijo/schema/domain.clj +++ b/src/wanijo/schema/domain.clj @@ -232,3 +232,13 @@ {:uuid uuid}] [create-schema-assignments {:uuid uuid :schemas schemas}])) + +(neo4j/defquery find-by-instance + "MATCH (i:instance {uuid:{uuid}})-[:of]->(s:schema) + RETURN s") + +(defn find-by-instance! [uuid] + (-> find-by-instance + (neo4j/exec-query! {:uuid uuid}) + first + :s))