summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoreltrac <hi@eltr.ac>2026-10-19 11:04:41 +0800
committereltrac <hi@eltr.ac>2026-10-19 11:04:41 +0800
commit5d44b728c4d9cbe2960a02f7059d32c8df426926 (patch)
tree616ece49554732d1faca4eb06a5a460082de71d8 /src
parent2250b567354d00feb9c6e1fae416cf7fe8a305ef (diff)
core, migration: add migrate-db, from edn to sqlite
Diffstat (limited to 'src')
-rw-r--r--src/weepinbell/core.clj8
-rw-r--r--src/weepinbell/migration.clj15
2 files changed, 22 insertions, 1 deletions
diff --git a/src/weepinbell/core.clj b/src/weepinbell/core.clj
index 25b1f16..2435029 100644
--- a/src/weepinbell/core.clj
+++ b/src/weepinbell/core.clj
@@ -8,6 +8,7 @@
[weepinbell.storage.worker :as worker]
[clojure.core.async :refer [chan >!! <!!]]
[taoensso.timbre :as timbre]
+ [weepinbell.migration :as m]
;; two main subsystems' facades
[weepinbell.processor.facade :refer [start-processor]]
[weepinbell.webserver.facade :refer [start-webserver]])
@@ -53,7 +54,7 @@
; Entry point; Terminal user interface
;; start up system and wait for signals to perform graceful shutdown
-(defn -main [& _]
+(defn start-engine []
(let [config-file (or (System/getenv "WEEPINBELL_CONFIG") "config.edn")
config (load-config config-file)
log-level (or (System/getenv "WEEPINBELL_LOGLEVEL")
@@ -74,3 +75,8 @@
;; block til signal received
(<!! done-chan))))
+(defn -main [& args]
+ (case (first args)
+ "migrate-db" (apply m/edn->sqlite (rest args))
+ (start-engine)))
+
diff --git a/src/weepinbell/migration.clj b/src/weepinbell/migration.clj
new file mode 100644
index 0000000..0667bc3
--- /dev/null
+++ b/src/weepinbell/migration.clj
@@ -0,0 +1,15 @@
+(ns weepinbell.migration
+ (:require [weepinbell.storage.sqlite :as sqlite]
+ [weepinbell.storage.edn-storage :as edns]))
+
+(defn edn->sqlite [edn-file sqlite-db]
+ {:pre [(some? edn-file) (some? sqlite-db)]}
+ (let [ds (sqlite/make-datasource sqlite-db)]
+ (sqlite/create-tables ds)
+ (edns/with-webmentions edn-file
+ (fn [wms]
+ (doseq [wm wms]
+ (let [id (get-in wm [:webmention :id])]
+ (println "Appending webmention" id "to database")
+ (sqlite/insert-webmention ds wm)))))
+ (println "Done")))