datomic progress.

This commit is contained in:
BC
2018-08-09 23:04:10 -07:00
parent 913a44fb48
commit bf0542d535
5 changed files with 169 additions and 2 deletions

129
src/clj/auto_ap/datomic.clj Normal file
View File

@@ -0,0 +1,129 @@
(ns autoap.datomic
(:require [datomic.api :as d]
[auto-ap.db.vendors :as v]
[clojure.string :as str]))
(def uri "datomic:sql://invoices?jdbc:postgresql://database:5432/datomic?user=datomic&password=datomic")
(defn create-database []
(d/create-database uri))
(defn create-schema []
(->>
[
;; vendors
{:db/ident :vendor/name
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one
:db/doc "A vendor's human-friendly name"}
{:db/ident :vendor/print-as
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one
:db/doc "Set if you want to override how this vendor's name is printed on checks"}
{:db/ident :vendor/email
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one
:db/doc "A vendor's email address"}
{:db/ident :vendor/phone
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one
:db/doc "A vendor's phone number"}
{:db/ident :vendor/invoice-reminder-schedule
:db/valueType :db.type/keyword
:db/cardinality :db.cardinality/one
:db/doc "How often to email this vendor about invoices"}
{:db/ident :vendor/primary-contact
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/one
:db/doc "The vendor's primary contact"}
{:db/ident :vendor/secondary-contact
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/one
:db/doc "The vendor's secondary contact"}
{:db/ident :vendor/address
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/one
:db/isComponent true
:db/doc "The vendor's address"}
{:db/ident :address/street1
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/one
:db/doc "123 main st"}
{:db/ident :address/street2
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/one
:db/doc "Apt A"}
{:db/ident :address/city
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/one
:db/doc "Campbell"}
{:db/ident :address/state
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/one
:db/doc "CA"}
{:db/ident :address/zip
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/one
:db/doc "95014"}
{:db/ident :testing/number
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one
:db/doc "A useless entity"}]
(d/transact (d/connect uri))))
(defn load-entities []
(d/transact (d/connect uri)
[{:db/ident :test
:testing/number "1"}
{:db/ident :test-2
:testing/number "2"}]
))
(defn query-entities []
(d/q '[:find (pull ?e [:vendor/name])
:where [?e :vendor/name]]
(d/db (d/connect uri))))
(defn load-vendors []
(d/transact
(d/connect uri)
(let [all-vendors (v/get-all)]
(doto (map
(fn [{:keys [primary-phone address email primary-contact secondary-email secondary-contact primary-email name default-expense-account id code secondary-phone invoice-reminder-schedule print-as]}]
(cond-> #:vendor {#_#_:db/ident id
:name name}
email (assoc :vendor/email email)
invoice-reminder-schedule (assoc :vendor/invoice-reminder-schedule invoice-reminder-schedule)
(and address
(:street1 address)
(:street2 address)
(:city address)
(:state address)
(:zip address))
(assoc :vendor/address #:address {
:street1 (:street1 address)
:street2 (:street2 address)
:city (:city address)
:state (:state address)
:zip (:zip address)})))
all-vendors)
clojure.pprint/pprint)
)))
(defn do []
(create-database uri)
@(create-schema )
@(load-entities)
@(load-vendors)
(count (query-entities)))