diff options
| author | eltrac <hi@eltr.ac> | 2026-10-19 11:04:41 +0800 |
|---|---|---|
| committer | eltrac <hi@eltr.ac> | 2026-10-19 11:04:41 +0800 |
| commit | 5d44b728c4d9cbe2960a02f7059d32c8df426926 (patch) | |
| tree | 616ece49554732d1faca4eb06a5a460082de71d8 | |
| parent | 2250b567354d00feb9c6e1fae416cf7fe8a305ef (diff) | |
core, migration: add migrate-db, from edn to sqlite
| -rw-r--r-- | src/weepinbell/core.clj | 8 | ||||
| -rw-r--r-- | src/weepinbell/migration.clj | 15 |
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")))
|
