add player order and case-insensitive code comparison
This commit is contained in:
parent
da1e391830
commit
62ec327502
3 changed files with 31 additions and 12 deletions
|
|
@ -3,6 +3,6 @@ CREATE TABLE IF NOT EXISTS player (
|
|||
score INTEGER NOT NULL,
|
||||
name text NOT NULL,
|
||||
game_code text NOT NULL,
|
||||
FOREIGN KEY (game_code)
|
||||
REFERENCES game(code)
|
||||
play_order integer NOT NULL,
|
||||
FOREIGN KEY (game_code) REFERENCES game(code)
|
||||
);
|
||||
|
|
|
|||
|
|
@ -26,12 +26,19 @@
|
|||
[:h4.pico-color-red-500 s])
|
||||
|
||||
(defn set-bar [{:keys [example/ds session params] :as _ctx}]
|
||||
(let [players (map str/trim (-> params :players str/split-lines))
|
||||
id (-> session :id)
|
||||
code (game-code)]
|
||||
(let [players (map str/trim (-> params :players str/split-lines))]
|
||||
(if (> 2 (count players))
|
||||
(error-style "Need at least two players")
|
||||
(do
|
||||
(let [id (-> session :id)
|
||||
code (game-code)
|
||||
random-order? (= "on" (-> params :random-player-order))
|
||||
player-order (if random-order?
|
||||
(shuffle (range 0 (count players)))
|
||||
(range 0 (count players)))]
|
||||
(println players)
|
||||
(println player-order)
|
||||
(println (interleave players player-order))
|
||||
|
||||
(jdbc/execute! ds (sql/format {:insert-into :game
|
||||
:values [{:id id
|
||||
:code code
|
||||
|
|
@ -41,9 +48,10 @@
|
|||
:do-update-set [:code :display_session :active]}))
|
||||
|
||||
(jdbc/execute! ds (sql/format {:insert-into :player
|
||||
:values (for [p players]
|
||||
:values (for [[p o] (partition 2 (interleave players player-order))]
|
||||
{:score 0
|
||||
:name p
|
||||
:play_order o
|
||||
:game_code code})}))
|
||||
|
||||
{:status 200
|
||||
|
|
@ -59,9 +67,10 @@
|
|||
game (jdbc/execute-one! ds (sql/format {:select :*
|
||||
:from :game
|
||||
:where [:= :id id]}))
|
||||
players (jdbc/execute! ds (sql/format {:select :*
|
||||
:from :player
|
||||
:where [:= :game_code (:game/code game)]}))]
|
||||
players (sort-by :player/play_order
|
||||
(jdbc/execute! ds (sql/format {:select :*
|
||||
:from :player
|
||||
:where [:= :game_code (:game/code game)]})))]
|
||||
|
||||
(println id)
|
||||
(pprint/pprint game)
|
||||
|
|
@ -94,7 +103,7 @@
|
|||
:as _ctx}]
|
||||
|
||||
(let [code (:code path-params)
|
||||
players (jdbc/execute! ds (sql/format {:select :* :from :player :where [:= :game_code code]}))]
|
||||
players (sort-by :player/play_order (jdbc/execute! ds (sql/format {:select :* :from :player :where [:= :game_code code]})))]
|
||||
(ui/page {}
|
||||
[:div [:nav
|
||||
[:ul [:li [:strong "Score the pigs"]]]
|
||||
|
|
@ -153,6 +162,16 @@
|
|||
:id ::new-game-form}
|
||||
[:div
|
||||
[:textarea#players {:type "textarea" :rows "8" :name "players"}]
|
||||
[:fieldset
|
||||
[:legend "Game options:"]
|
||||
[:label
|
||||
[:input {:type "checkbox", :name "random-player-order", :checked ""}]
|
||||
"Random player order"]
|
||||
;; [:label
|
||||
;; [:input {:type "checkbox", :name "french", :checked ""}]
|
||||
;; "French"]
|
||||
]
|
||||
|
||||
[:button {:type "submit"} "Start"]])
|
||||
(biff/form
|
||||
{:hx-post "/connect"
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
(defn wrap-session [handler]
|
||||
(fn [{:keys [session] :as req}]
|
||||
(let [req (update-in req [:path-params :code] str/lower-case)]
|
||||
(let [req (update-in req [:path-params :code] #(when % (str/lower-case %)))]
|
||||
(if (some? (:id session))
|
||||
(do
|
||||
(println "found session id" (:id session))
|
||||
|
|
|
|||
Loading…
Reference in a new issue