add player order and case-insensitive code comparison

This commit is contained in:
Luciano Laratelli 2025-03-12 17:31:44 -04:00
parent da1e391830
commit 62ec327502
3 changed files with 31 additions and 12 deletions

View file

@ -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)
);

View file

@ -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"

View file

@ -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))