diff --git a/dev/clj/app/db.clj b/dev/clj/app/db.clj index dfcb6f5..aed7bb7 100644 --- a/dev/clj/app/db.clj +++ b/dev/clj/app/db.clj @@ -20,7 +20,7 @@ (defstate conn :start (new-connection config) :stop (disconnect config conn)) -;; datomic schema (staging as an example) +;; datomic schema (staging for an example) (defn create-schema [conn] (let [schema [{:db/id #db/id [:db.part/db] :db/ident :order/symbol diff --git a/dev/clj/app/example.clj b/dev/clj/app/example.clj index 6583d02..ab425eb 100644 --- a/dev/clj/app/example.clj +++ b/dev/clj/app/example.clj @@ -2,7 +2,7 @@ (:require [clojure.tools.nrepl.server :refer [start-server stop-server]] [mount.core :as mount :refer [defstate]] [app.conf :refer [config]] - [app.www :refer [nyse-app]]) + [app.www]) (:gen-class)) ;; for -main / uberjar (no need in dev) ;; example on creating a network REPL diff --git a/dev/clj/app/nyse.clj b/dev/clj/app/nyse.clj index 6cd1147..1d45255 100644 --- a/dev/clj/app/nyse.clj +++ b/dev/clj/app/nyse.clj @@ -1,20 +1,16 @@ (ns app.nyse (:require [datomic.api :as d] - [app.db :refer [create-schema] :as db] [app.utils.datomic :refer [touch]])) -(defn add-order [ticker bid offer qty] ;; can take connection as param - @(d/transact db/conn [{:db/id (d/tempid :db.part/user) - :order/symbol ticker - :order/bid bid - :order/offer offer - :order/qty qty}])) +(defn add-order [conn {:keys [ticker bid offer qty]}] + @(d/transact conn [{:db/id (d/tempid :db.part/user) + :order/symbol ticker + :order/bid bid + :order/offer offer + :order/qty qty}])) -(defn find-orders [ticker] ;; can take connection as param +(defn find-orders [conn ticker] (let [orders (d/q '[:find ?e :in $ ?ticker :where [?e :order/symbol ?ticker]] - (d/db db/conn) ticker)] - (touch db/conn orders))) - -(defn create-nyse-schema [] - (create-schema db/conn)) + (d/db conn) ticker)] + (touch conn orders))) diff --git a/dev/clj/app/www.clj b/dev/clj/app/www.clj index 2103d4e..8c02986 100644 --- a/dev/clj/app/www.clj +++ b/dev/clj/app/www.clj @@ -1,5 +1,6 @@ (ns app.www - (:require [app.nyse :refer [add-order find-orders create-nyse-schema]] + (:require [app.nyse :refer [add-order find-orders]] + [app.db :refer [conn create-schema]] [app.conf :refer [config]] [mount.core :refer [defstate]] [cheshire.core :refer [generate-string]] @@ -11,21 +12,22 @@ (GET "/" [] "welcome to mount sample app!") (GET "/nyse/orders/:ticker" [ticker] - (generate-string (find-orders ticker))) + (generate-string (find-orders conn ticker))) (POST "/nyse/orders" [ticker qty bid offer] - (add-order ticker (bigdec bid) (bigdec offer) (Integer/parseInt qty)) - (generate-string {:added {:ticker ticker - :qty qty - :bid bid - :offer offer}}))) + (let [order {:ticker ticker + :bid (bigdec bid) + :offer (bigdec offer) + :qty (Integer/parseInt qty)}] + (add-order conn order) + (generate-string {:added order})))) -(defn start-nyse [{:keys [www]}] - (create-nyse-schema) ;; creating schema (usually done long before the app is started..) +(defn start-nyse [conn {:keys [www]}] ;; app entry point + (create-schema conn) ;; just an example, usually schema would already be there (-> (routes mount-example-routes) (handler/site) (run-jetty {:join? false :port (:port www)}))) -(defstate nyse-app :start (start-nyse config) +(defstate nyse-app :start (start-nyse conn config) :stop (.stop nyse-app)) ;; it's a "org.eclipse.jetty.server.Server" at this point diff --git a/dev/clj/dev.clj b/dev/clj/dev.clj index 079095b..3fccfd4 100644 --- a/dev/clj/dev.clj +++ b/dev/clj/dev.clj @@ -6,8 +6,9 @@ [mount.tools.graph :refer [states-with-deps]] [app.utils.logging :refer [with-logging-status]] [app.www] + [app.db :refer [conn]] [app.example] - [app.nyse :refer [create-nyse-schema find-orders add-order]])) ;; <<<< replace this your "app" namespace(s) you want to be available at REPL time + [app.nyse :refer [find-orders add-order]])) ;; <<<< replace this your "app" namespace(s) you want to be available at REPL time (defn start [] (with-logging-status)