datomic progress.
This commit is contained in:
12
datomic-init/postgres-db.sql
Executable file
12
datomic-init/postgres-db.sql
Executable file
@@ -0,0 +1,12 @@
|
||||
-- Database: datomic
|
||||
|
||||
-- DROP DATABASE datomic;
|
||||
|
||||
CREATE DATABASE datomic
|
||||
WITH OWNER = postgres
|
||||
TEMPLATE template0
|
||||
ENCODING = 'UTF8'
|
||||
TABLESPACE = pg_default
|
||||
LC_COLLATE = 'en_US.UTF-8'
|
||||
LC_CTYPE = 'en_US.UTF-8'
|
||||
CONNECTION LIMIT = -1;
|
||||
19
datomic-init/postgres-table.sql
Executable file
19
datomic-init/postgres-table.sql
Executable file
@@ -0,0 +1,19 @@
|
||||
-- Table: datomic_kvs
|
||||
|
||||
-- DROP TABLE datomic_kvs;
|
||||
|
||||
CREATE TABLE datomic_kvs
|
||||
(
|
||||
id text NOT NULL,
|
||||
rev integer,
|
||||
map text,
|
||||
val bytea,
|
||||
CONSTRAINT pk_id PRIMARY KEY (id )
|
||||
)
|
||||
WITH (
|
||||
OIDS=FALSE
|
||||
);
|
||||
ALTER TABLE datomic_kvs
|
||||
OWNER TO postgres;
|
||||
GRANT ALL ON TABLE datomic_kvs TO postgres;
|
||||
GRANT ALL ON TABLE datomic_kvs TO public;
|
||||
5
datomic-init/postgres-user.sql
Executable file
5
datomic-init/postgres-user.sql
Executable file
@@ -0,0 +1,5 @@
|
||||
|
||||
-- DROP ROLE :datomic
|
||||
|
||||
CREATE ROLE datomic LOGIN PASSWORD 'datomic';
|
||||
|
||||
@@ -3,10 +3,12 @@
|
||||
:url "http://example.com/FIXME"
|
||||
:min-lein-version "2.0.0"
|
||||
:repositories {"my.datomic.com" {:url "https://my.datomic.com/repo"
|
||||
:creds :gpg}}
|
||||
:username "datomic@brycecovertoperations.com"
|
||||
:password "0ba303bb-01be-471c-bc91-1dfd3172a96a"}}
|
||||
:dependencies [[org.clojure/clojure "1.9.0"]
|
||||
[org.clojure/clojurescript "1.10.238"]
|
||||
[postgresql/postgresql "9.3-1102.jdbc41"]
|
||||
[com.datomic/datomic-pro "0.9.5703" :exclusions [com.google.guava/guava]]
|
||||
[compojure "1.6.0"]
|
||||
[kibu/pushy "0.3.8"]
|
||||
[bidi "2.1.2"]
|
||||
@@ -76,7 +78,7 @@
|
||||
:plugins [[lein-figwheel "0.5.13"]
|
||||
[lein-pdo "0.1.1"]
|
||||
[cider/cider-nrepl "0.16.0"]]
|
||||
:jvm-opts ["-Dconfig=config/dev.edn" #_#_"--add-modules" "java.xml.bind"]}
|
||||
:jvm-opts ["-Dconfig=config/dev.edn" "--add-modules" "java.xml.bind"]}
|
||||
:uberjar {:prep-tasks [["cljsbuild" "once" "min"] "compile"]}
|
||||
:provided {:dependencies [[org.clojure/clojurescript "1.10.238"]
|
||||
[reagent "0.7.0"]
|
||||
|
||||
129
src/clj/auto_ap/datomic.clj
Normal file
129
src/clj/auto_ap/datomic.clj
Normal 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)))
|
||||
|
||||
Reference in New Issue
Block a user