persist state using duratom
s-ol
6 months ago
20 | 20 |
WORKDIR /app
|
21 | 21 |
COPY --from=build /app/app.jar app.jar
|
22 | 22 |
EXPOSE 8080
|
|
23 |
VOLUME /data
|
|
24 |
ENV SUDOKU_STATE_FILE=/data/sudoku.edn
|
23 | 25 |
ARG VERSION
|
24 | 26 |
ENV VERSION=$VERSION
|
25 | 27 |
CMD java -DHYPERFIDDLE_ELECTRIC_VERSION=$VERSION -jar app.jar
|
8 | 8 |
org.clojure/clojure {:mvn/version "1.11.1"}
|
9 | 9 |
org.clojure/clojurescript {:mvn/version "1.11.60"}
|
10 | 10 |
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"}}
|
12 | 13 |
:aliases {:dev
|
13 | 14 |
{:extra-deps
|
14 | 15 |
{binaryage/devtools {:mvn/version "1.0.6"}
|
3 | 3 |
(:require [hyperfiddle.electric :as e]
|
4 | 4 |
[hyperfiddle.electric-dom2 :as dom]
|
5 | 5 |
[hyperfiddle.electric-ui4 :as ui]
|
6 | |
[clojure.string :as string]))
|
|
6 |
[clojure.string :as string]
|
|
7 |
#?(:clj [duratom.core :refer [duratom]])))
|
7 | 8 |
|
8 | 9 |
|
9 | 10 |
;;; logic
|
10 | 11 |
;;;;;;;;;
|
|
12 |
|
11 | 13 |
(defn map2dv [f]
|
12 | 14 |
(mapv #(mapv (partial f %) (range 9)) (range 9)))
|
13 | 15 |
|
|
33 | 35 |
(if (number? v) #{v} v))
|
34 | 36 |
; (and (not notes) (set? v) (= 1 (count v))) (first v)
|
35 | 37 |
|
|
38 |
|
36 | 39 |
;;; app state
|
37 | 40 |
;;;;;;;;;;;;;
|
|
41 |
|
38 | 42 |
; dynamic def for sharing state between server/client
|
39 | 43 |
(e/def state)
|
40 | 44 |
|
|
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 |
|
41 | 55 |
; server-side atom for actual storage
|
42 | |
(def !state #?(:clj (atom (make-sudoku 64))))
|
|
56 |
(def !state #?(:clj (make-atom (make-sudoku 64))))
|
|
57 |
|
43 | 58 |
|
44 | 59 |
;;; view stuff
|
45 | 60 |
;;;;;;;;;;;;;;
|
|
61 |
|
46 | 62 |
(defn i->num [v]
|
47 | 63 |
(inc (+ v (quot v 3))))
|
48 | 64 |
|