git.s-ol.nu electric-sudoku / 697c1d7
persist state using duratom s-ol 6 months ago
3 changed file(s) with 22 addition(s) and 3 deletion(s). Raw diff Collapse all Expand all
2020 WORKDIR /app
2121 COPY --from=build /app/app.jar app.jar
2222 EXPOSE 8080
23 VOLUME /data
24 ENV SUDOKU_STATE_FILE=/data/sudoku.edn
2325 ARG VERSION
2426 ENV VERSION=$VERSION
2527 CMD java -DHYPERFIDDLE_ELECTRIC_VERSION=$VERSION -jar app.jar
88 org.clojure/clojure {:mvn/version "1.11.1"}
99 org.clojure/clojurescript {:mvn/version "1.11.60"}
1010 org.clojure/tools.logging {:mvn/version "1.2.4"}
11 de.sfuhrm/sudoku {:mvn/version "5.0.1"}}
11 de.sfuhrm/sudoku {:mvn/version "5.0.1"}
12 duratom/duratom {:mvn/version "0.5.4"}}
1213 :aliases {:dev
1314 {:extra-deps
1415 {binaryage/devtools {:mvn/version "1.0.6"}
33 (:require [hyperfiddle.electric :as e]
44 [hyperfiddle.electric-dom2 :as dom]
55 [hyperfiddle.electric-ui4 :as ui]
6 [clojure.string :as string]))
6 [clojure.string :as string]
7 #?(:clj [duratom.core :refer [duratom]])))
78
89
910 ;;; logic
1011 ;;;;;;;;;
12
1113 (defn map2dv [f]
1214 (mapv #(mapv (partial f %) (range 9)) (range 9)))
1315
3335 (if (number? v) #{v} v))
3436 ; (and (not notes) (set? v) (= 1 (count v))) (first v)
3537
38
3639 ;;; app state
3740 ;;;;;;;;;;;;;
41
3842 ; dynamic def for sharing state between server/client
3943 (e/def state)
4044
45 #?(:clj (defn make-atom [init-val]
46 (let [state-file-path (System/getenv "SUDOKU_STATE_FILE")]
47 (if state-file-path
48 (do
49 (println "storing state in" state-file-path)
50 (duratom :local-file
51 :file-path state-file-path
52 :init init-val))
53 (atom init-val)))))
54
4155 ; server-side atom for actual storage
42 (def !state #?(:clj (atom (make-sudoku 64))))
56 (def !state #?(:clj (make-atom (make-sudoku 64))))
57
4358
4459 ;;; view stuff
4560 ;;;;;;;;;;;;;;
61
4662 (defn i->num [v]
4763 (inc (+ v (quot v 3))))
4864