67 lines
2.4 KiB
Clojure
67 lines
2.4 KiB
Clojure
(ns tapp.example
|
|
(:require [datomic.api :as d]
|
|
[clojure.tools.nrepl.server :refer [start-server stop-server]]
|
|
[mount.core :as mount :refer [defstate]]
|
|
[tapp.utils.datomic :refer [touch]]
|
|
[tapp.conf :refer [config]]
|
|
[tapp.nyse :as nyse]))
|
|
|
|
(alter-meta! *ns* assoc ::load false)
|
|
|
|
;; example on creating a network REPL
|
|
(defn- start-nrepl [{:keys [host port]}]
|
|
(start-server :bind host :port port))
|
|
|
|
;; nREPL is just another simple state
|
|
(defstate nrepl :start (start-nrepl (:nrepl @config))
|
|
:stop (stop-server @nrepl))
|
|
|
|
;; datomic schema
|
|
(defn create-schema [conn]
|
|
(let [schema [{:db/id #db/id [:db.part/db]
|
|
:db/ident :order/symbol
|
|
:db/valueType :db.type/string
|
|
:db/cardinality :db.cardinality/one
|
|
:db/index true
|
|
:db.install/_attribute :db.part/db}
|
|
|
|
{:db/id #db/id [:db.part/db]
|
|
:db/ident :order/bid
|
|
:db/valueType :db.type/bigdec
|
|
:db/cardinality :db.cardinality/one
|
|
:db.install/_attribute :db.part/db}
|
|
|
|
{:db/id #db/id [:db.part/db]
|
|
:db/ident :order/qty
|
|
:db/valueType :db.type/long
|
|
:db/cardinality :db.cardinality/one
|
|
:db.install/_attribute :db.part/db}
|
|
|
|
{:db/id #db/id [:db.part/db]
|
|
:db/ident :order/offer
|
|
:db/valueType :db.type/bigdec
|
|
:db/cardinality :db.cardinality/one
|
|
:db.install/_attribute :db.part/db}]]
|
|
|
|
@(d/transact conn schema)))
|
|
|
|
(defn add-order [ticker bid offer qty] ;; can take connection as param
|
|
@(d/transact @nyse/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
|
|
(let [orders (d/q '[:find ?e :in $ ?ticker
|
|
:where [?e :order/symbol ?ticker]]
|
|
(d/db @nyse/conn) ticker)]
|
|
(touch @nyse/conn orders)))
|
|
|
|
(defn create-nyse-schema []
|
|
(create-schema @nyse/conn))
|
|
|
|
;; example of an app entry point
|
|
(defn -main [& args]
|
|
(mount/start))
|