migrate.cljs 797 B

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