diff --git a/resources/migrations/20250312151928-create-players.up.sql b/resources/migrations/20250312151928-create-players.up.sql index d81233e..2884edf 100644 --- a/resources/migrations/20250312151928-create-players.up.sql +++ b/resources/migrations/20250312151928-create-players.up.sql @@ -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) ); diff --git a/src/com/biffweb/my_project/app.clj b/src/com/biffweb/my_project/app.clj index c4677f9..1d584b3 100644 --- a/src/com/biffweb/my_project/app.clj +++ b/src/com/biffweb/my_project/app.clj @@ -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" diff --git a/src/com/biffweb/my_project/middleware.clj b/src/com/biffweb/my_project/middleware.clj index 304f0c2..ae2360a 100644 --- a/src/com/biffweb/my_project/middleware.clj +++ b/src/com/biffweb/my_project/middleware.clj @@ -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))