using transactions FTW

This commit is contained in:
Bryce Covert
2018-05-14 10:40:57 -07:00
parent cffff99014
commit 431645ad42
3 changed files with 27 additions and 13 deletions

View File

@@ -42,17 +42,21 @@
(defn merge-data [{:keys [data] :as x}]
(merge x (edn/read-string data)))
(def ^{:dynamic true} current-conn nil)
(defn get-conn []
(let [db-host (:server (:db env))
db-port 5432
db-name "autoap"]
{:classname "org.postgresql.Driver" ; must be in classpath
#_#_:ssl true
#_#_:sslfactory "org.postgresql.ssl.NonValidatingFactory"
:subprotocol "postgresql"
:subname (str "//" db-host ":" db-port "/" db-name)
:user "ap"
:password "fifteen-invoices-imported!"}))
(if current-conn
current-conn
(let [db-host (:server (:db env))
db-port 5432
db-name "autoap"]
{:classname "org.postgresql.Driver" ; must be in classpath
#_#_:ssl true
#_#_:sslfactory "org.postgresql.ssl.NonValidatingFactory"
:subprotocol "postgresql"
:subname (str "//" db-host ":" db-port "/" db-name)
:user "ap"
:password "fifteen-invoices-imported!"})))
(defn query [q]
(let [formatted (sql/format q)]

View File

@@ -7,9 +7,11 @@
[auto-ap.routes.graphql :as graphql]
[auto-ap.routes.vendors :as vendors]
[auto-ap.routes.checks :as checks]
[auto-ap.db.utils :as u]
[buddy.auth.backends.token :refer [jws-backend]]
[buddy.auth.middleware :refer [wrap-authentication
wrap-authorization]]
[clojure.java.jdbc :as jdbc]
[compojure.core :refer :all]
[compojure.route :as route]
[config.core :refer [env]]
@@ -44,8 +46,19 @@
api-routes
static-routes))
(defn wrap-transaction [handler]
(fn [request]
(jdbc/with-db-transaction [t (u/get-conn)]
(binding [u/current-conn t]
(try
(handler (assoc request :db-conn t))
(catch Exception e
(jdbc/db-set-rollback-only! t)
(throw e)))))))
(def app
(-> #'app-routes
(wrap-transaction)
(wrap-authorization auth-backend)
(wrap-authentication auth-backend)
(wrap-reload)

View File

@@ -10,17 +10,14 @@
[goog.string :as gstring]))
;; TODO show busy
;; TODO only when one company selected
;; TODO partial payments
;; TODO invoice status = paid when complete
;; TODO performance
;; TODO check numbers
;; TODO psql transactions
;; TODO refactor graphql
(defn query [params]
{:venia/queries [[:invoice_page
(assoc params