diff --git a/src/wanijo/auth/routes.clj b/src/wanijo/auth.clj similarity index 87% rename from src/wanijo/auth/routes.clj rename to src/wanijo/auth.clj index 3d97f64..95c8def 100644 --- a/src/wanijo/auth/routes.clj +++ b/src/wanijo/auth.clj @@ -1,10 +1,10 @@ -(ns wanijo.auth.routes +(ns wanijo.auth (:require [compojure.core :refer [POST GET defroutes]] [ring.util.response :refer [redirect]] [ring.util.anti-forgery :refer [anti-forgery-field]] [buddy.hashers :as hashers] [hiccup.form :as hform] - [wanijo.view :as view] + [wanijo.view.page :as page] [wanijo.domain.user :as domain-user])) (defn- login-check! [req] @@ -14,12 +14,13 @@ (hashers/check pw hash))] (if pwmatch (-> (redirect "/") - (assoc-in [:session :ident] uname)) + (assoc-in [:session :ident] uname) + (assoc-in [:session :uuid] (:uuid unode))) (-> (redirect "/login") (assoc :flash :invalid-credentials))))) (defn login [req] - (view/layout! + (page/layout! :content [[:h1 "Kama ken"] (hform/form-to diff --git a/src/wanijo/domain/schema.clj b/src/wanijo/domain/schema.clj index 15fc31e..ade07c0 100644 --- a/src/wanijo/domain/schema.clj +++ b/src/wanijo/domain/schema.clj @@ -1,11 +1,9 @@ (ns wanijo.domain.schema - (:require [clojurewerkz.neocons.rest.cypher :as cypher] - [clojure.spec.alpha :as spec] - [wanijo.neo4j :as neo4j] - [wanijo.devmode :as devmode])) + (:require [clojure.spec.alpha :as spec] + [wanijo.neo4j :as neo4j])) (spec/def ::name - (spec/and string? not-empty int?)) + (spec/and string? not-empty)) (spec/def ::created-at (spec/or :int (spec/and int? @@ -13,13 +11,27 @@ :str (spec/and string? #(re-matches #"\d{4}\d{2}\d{2}\d{2}\d{2}\d{2}" %)))) -(defn all-created-by! [ident] +(defn all-created-by! [user-uuid] (neo4j/query-rawdata! :query "MATCH (s:schema)-[:created_by]->(u:user) - WHERE u.ident = {ident} + WHERE u.uuid = {uuid} RETURN s ORDER BY s.name" - :params {:ident ident} - :alias "s" - )) + :params {:uuid user-uuid} + :alias "s")) + +(defn create-new! [name user-uid] + (:uuid + (neo4j/query-rawdata! + :query + "MATCH (u:user) + WHERE u.uuid = {u_uuid} + CREATE (s:schema)-[:created_by]->(u) + SET s.name = {name} + SET s.uuid = {s_uuid} + RETURN s" + :params {:u_uuid user-uid + :name name + :s_uuid (neo4j/uuid)} + :alias "s"))) diff --git a/src/wanijo/domain/user.clj b/src/wanijo/domain/user.clj index f4fb27a..4b8bb6c 100644 --- a/src/wanijo/domain/user.clj +++ b/src/wanijo/domain/user.clj @@ -2,10 +2,11 @@ (:require [wanijo.neo4j :as neo4j])) (defn find! [ident] - (neo4j/query-rawdata! - :query - "MATCH (n:user) - WHERE n.ident = {ident} - RETURN n" - :alias "n" - :params {:ident ident})) + (first + (neo4j/query-rawdata! + :query + "MATCH (n:user) + WHERE n.ident = {ident} + RETURN n" + :alias "n" + :params {:ident ident}))) diff --git a/src/wanijo/handler.clj b/src/wanijo/handler.clj index 5699e12..74fd809 100644 --- a/src/wanijo/handler.clj +++ b/src/wanijo/handler.clj @@ -6,7 +6,7 @@ :refer [wrap-defaults site-defaults]] [ring.util.response :as rur] [ring.middleware.session.cookie :as session-cookie] - [wanijo.auth.routes :refer [auth-routes]] + [wanijo.auth :refer [auth-routes]] [wanijo.home.routes :refer [home-routes]] [wanijo.schema.routes :refer [schema-routes]] [wanijo.devmode :as devmode])) diff --git a/src/wanijo/neo4j.clj b/src/wanijo/neo4j.clj index 4c2aedd..f1b2d7d 100644 --- a/src/wanijo/neo4j.clj +++ b/src/wanijo/neo4j.clj @@ -24,9 +24,10 @@ (defn query-rawdata! [& {:keys [query alias params] :or {params {}}}] - (devmode/send-to-bar (str (butiful-query query) - "
---Params---
" - params)) + (devmode/send-to-bar + (str (butiful-query query) + "
---Params---
" + params)) (->> (cypher/tquery (conn!) query params) (map #(get % alias)) diff --git a/src/wanijo/schema/routes.clj b/src/wanijo/schema/routes.clj index ff96eec..76f1def 100644 --- a/src/wanijo/schema/routes.clj +++ b/src/wanijo/schema/routes.clj @@ -14,8 +14,9 @@ (defn- overview! [req] (let [session (:session req) - ident (:ident session) - schemas (domain-schema/all-created-by! ident)] + uuid (:uuid session) + schemas (domain-schema/all-created-by! uuid)] + (println schemas) (page/layout! :session session :content @@ -39,7 +40,11 @@ (defn- new! [req] (if (forms/valid? new-schema-form req) - (resp/redirect "/schema") + (do + (domain-schema/create-new! + (get-in req [:params :schema-name]) + (get-in req [:session :uuid])) + (resp/redirect "/schema")) (overview! req))) (defroutes schema-routes diff --git a/src/wanijo/view/forms.clj b/src/wanijo/view/forms.clj index 4040614..d83494b 100644 --- a/src/wanijo/view/forms.clj +++ b/src/wanijo/view/forms.clj @@ -32,13 +32,12 @@ field-value)))) (defn valid? [form-def req] - (clojure.pprint/pprint req) (reduce-kv (fn [result field value] - (if (spec/valid? - (get-in form-def [:fields field :spec]) - value) - true - (reduced false))) + (if-let [field-spec (get-in form-def [:fields field :spec])] + (if (spec/valid? field-spec value) + true + (reduced false)) + result)) true (:params req)))