migrate.cljs 833 B

1234567891011121314151617181920212223242526272829
  1. (ns frontend.db.migrate
  2. (:require [clojure.walk :as walk]
  3. [datascript.core :as d]
  4. [frontend.db-schema :as db-schema]
  5. [frontend.state :as state]))
  6. (defn- migrate-attribute
  7. [f]
  8. (if (and (keyword? f) (= "page" (namespace f)))
  9. (let [k (keyword "block" (name f))]
  10. (case k
  11. :block/ref-pages
  12. :block/refs
  13. k))
  14. f))
  15. (defn with-schema [db new-schema]
  16. (let [datoms (->> (d/datoms db :eavt)
  17. (map (fn [d]
  18. (let [a (migrate-attribute (:a d))]
  19. (d/datom (:e d) a (:v d) (:tx d) (:added d))))))]
  20. (-> (d/empty-db new-schema)
  21. (with-meta (meta db))
  22. (d/db-with datoms))))
  23. (defn migrate
  24. [repo db]
  25. (state/pub-event! [:graph/migrated repo])
  26. (with-schema db db-schema/schema))