Adding migrations
This commit is contained in:
56
src/clj/auto_ap/datomic/migrate.clj
Normal file
56
src/clj/auto_ap/datomic/migrate.clj
Normal file
@@ -0,0 +1,56 @@
|
||||
(ns auto-ap.datomic.migrate
|
||||
(:require [auto-ap.datomic :refer [uri]]
|
||||
[datomic.api :as d]
|
||||
[clojure.java.io :as io]
|
||||
[io.rkn.conformity :as c])
|
||||
(:import [datomic Util])
|
||||
(:gen-class))
|
||||
|
||||
|
||||
(defn read-dtm
|
||||
"Reads a dtm file (i.e., an edn file with datomic tags in it) from the classpath
|
||||
and returns a vector of all forms contained within."
|
||||
[filename]
|
||||
(-> (io/resource filename) (io/reader) (Util/readAll)))
|
||||
|
||||
(defn functions [conn]
|
||||
[[{:db/ident :pay
|
||||
:db/doc "Data function that increments value of attribute a by amount."
|
||||
:db/fn (d/function '{:lang "clojure"
|
||||
:params [db e amount]
|
||||
:code (let [current-outstanding-balance (-> (d/entity db e) :invoice/outstanding-balance)
|
||||
new-outstanding-balance (- current-outstanding-balance amount)]
|
||||
[[:db/add e :invoice/outstanding-balance new-outstanding-balance]
|
||||
[:db/add e :invoice/status (if (> new-outstanding-balance 0)
|
||||
:invoice-status/unpaid
|
||||
:invoice-status/paid)]])})}
|
||||
{:db/ident :inc
|
||||
:db/doc "Data function that increments value of attribute a by amount."
|
||||
:db/fn (d/function '{:lang "clojure"
|
||||
:params [db e a amount]
|
||||
:code [[:db/add e a
|
||||
(-> (d/entity db e) a (+ amount))]] })}]] )
|
||||
|
||||
(defn -main [& args]
|
||||
(println "Creating database...")
|
||||
#_(d/delete-database uri)
|
||||
(d/create-database uri)
|
||||
|
||||
(let [
|
||||
conn (d/connect uri)
|
||||
norms-map {:auto-ap/base-schema {:txes auto-ap.datomic/base-schema}
|
||||
:auto-ap/functions {:txes-fn 'auto-ap.datomic.migrate/functions :requires [:auto-ap/base-schema]}
|
||||
:auto-ap/migrate-vendors {:txes-fn 'auto-ap.datomic/migrate-vendors :requires [:auto-ap/base-schema]}
|
||||
:auto-ap/migrate-clients {:txes-fn 'auto-ap.datomic/migrate-clients :requires [:auto-ap/migrate-vendors]}
|
||||
:auto-ap/migrate-users {:txes-fn 'auto-ap.datomic/migrate-users :requires [:auto-ap/migrate-clients]}
|
||||
:auto-ap/migrate-invoices {:txes-fn 'auto-ap.datomic/migrate-invoices :requires [:auto-ap/migrate-vendors :auto-ap/migrate-clients]}
|
||||
:auto-ap/migrate-payments {:txes-fn 'auto-ap.datomic/migrate-payments :requires [:auto-ap/migrate-invoices]}
|
||||
:auto-ap/migrate-invoices-payments {:txes-fn 'auto-ap.datomic/migrate-invoices-payments :requires [:auto-ap/migrate-payments :auto-ap/migrate-invoices]}
|
||||
:auto-ap/migrate-invoices-expense-accounts {:txes-fn 'auto-ap.datomic/migrate-invoices-expense-accounts :requires [:auto-ap/migrate-invoices-payments]}
|
||||
:auto-ap/migrate-transactions {:txes-fn 'auto-ap.datomic/migrate-transactions :requires [:auto-ap/migrate-invoices-expense-accounts]}
|
||||
}]
|
||||
(println "Conforming database...")
|
||||
(println (c/ensure-conforms conn norms-map))
|
||||
(d/release conn)
|
||||
(println "Done")))
|
||||
#_(-main)
|
||||
Reference in New Issue
Block a user