score-the-pigs/dev/user.clj

85 lines
2.7 KiB
Clojure

(ns user
(:require
[clojure.java.io :as io]
[clojure.tools.logging :as log]
[clojure.tools.namespace.repl :as tn-repl]
[migration :as migration]
[clojure.string :as str]
[com.score-the-pigs :as main :refer [system]]
[com.score-the-pigs.util.db :as db]
[honey.sql :as sql]
[honey.sql.helpers :refer [drop-table]]
[next.jdbc :as jdbc]
[migratus.core :as migratus]))
(defn reset-db! []
(let [{:keys [example/ds]} @system
tables [:game :player :schema_migrations]
drop-statements (map (fn [table] (sql/format (drop-table :if-exists table))) tables)]
(println ds)
(db/execute-all! ds drop-statements)
(migratus/migrate migration/config)
(let [game-code "test"]
(jdbc/execute! ds
(sql/format
{:insert-into :game
:values [{:code game-code,
:current_player 0,
:player_count 3,
:scoring_option "first-to-100"}]}))
(jdbc/execute! ds
(sql/format
{:insert-into :player
:values [{:game_score 0,
:round_score 0,
:name "luci",
:game_code game-code,
:play_order 0}
{:game_score 0,
:round_score 0,
:name "lily",
:game_code game-code,
:play_order 1}
{:game_score 0,
:round_score 0,
:name "delta",
:game_code game-code,
:play_order 2}]})))))
(defn game [c]
(let [{:keys [example/ds]} @system]
(->> {:select :* :from :game :where [:= :game.code c]}
sql/format
(jdbc/execute-one! ds))))
(defn games []
(let [{:keys [example/ds]} @system]
(->> {:select :* :from :game}
sql/format
(jdbc/execute! ds))))
(defn players []
(let [{:keys [example/ds]} @system]
(->> {:select :* :from :player}
sql/format
(jdbc/execute! ds))))
(defn game-players [c]
(let [{:keys [example/ds]} @system]
(->> {:select :* :from :player :where [:= :player.game-code c]}
sql/format
(jdbc/execute! ds))))
(defn refresh []
(doseq [f (:biff/stop @system)]
(log/info "stopping:" (str f))
(f))
(tn-repl/refresh :after `main/start)
:done)
(defn start []
(main/start))
(comment
(reset-db!)
(refresh))