diff options
| author | s-ol <s+removethis@s-ol.nu> | 2023-03-23 17:56:29 +0000 |
|---|---|---|
| committer | s-ol <s+removethis@s-ol.nu> | 2023-03-23 18:01:46 +0000 |
| commit | 697c1d7b4602f516c6f01105f19f6daa68708065 (patch) | |
| tree | ef99f0f6882334ca8d720180bc2ff820cad2360b /src | |
| parent | add Dockerfile, build support (diff) | |
| download | electric-sudoku-697c1d7b4602f516c6f01105f19f6daa68708065.tar.gz electric-sudoku-697c1d7b4602f516c6f01105f19f6daa68708065.zip | |
persist state using duratom
Diffstat (limited to 'src')
| -rw-r--r-- | src/app/sudoku.cljc | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/app/sudoku.cljc b/src/app/sudoku.cljc index 2137bba..dcbafb1 100644 --- a/src/app/sudoku.cljc +++ b/src/app/sudoku.cljc @@ -4,11 +4,13 @@ (:require [hyperfiddle.electric :as e] [hyperfiddle.electric-dom2 :as dom] [hyperfiddle.electric-ui4 :as ui] - [clojure.string :as string])) + [clojure.string :as string] + #?(:clj [duratom.core :refer [duratom]]))) ;;; logic ;;;;;;;;; + (defn map2dv [f] (mapv #(mapv (partial f %) (range 9)) (range 9))) @@ -34,16 +36,30 @@ (if (number? v) #{v} v)) ; (and (not notes) (set? v) (= 1 (count v))) (first v) + ;;; app state ;;;;;;;;;;;;; + ; dynamic def for sharing state between server/client (e/def state) +#?(:clj (defn make-atom [init-val] + (let [state-file-path (System/getenv "SUDOKU_STATE_FILE")] + (if state-file-path + (do + (println "storing state in" state-file-path) + (duratom :local-file + :file-path state-file-path + :init init-val)) + (atom init-val))))) + ; server-side atom for actual storage -(def !state #?(:clj (atom (make-sudoku 64)))) +(def !state #?(:clj (make-atom (make-sudoku 64)))) + ;;; view stuff ;;;;;;;;;;;;;; + (defn i->num [v] (inc (+ v (quot v 3)))) |
