using transactions FTW
This commit is contained in:
@@ -42,17 +42,21 @@
|
|||||||
(defn merge-data [{:keys [data] :as x}]
|
(defn merge-data [{:keys [data] :as x}]
|
||||||
(merge x (edn/read-string data)))
|
(merge x (edn/read-string data)))
|
||||||
|
|
||||||
|
(def ^{:dynamic true} current-conn nil)
|
||||||
|
|
||||||
(defn get-conn []
|
(defn get-conn []
|
||||||
(let [db-host (:server (:db env))
|
(if current-conn
|
||||||
db-port 5432
|
current-conn
|
||||||
db-name "autoap"]
|
(let [db-host (:server (:db env))
|
||||||
{:classname "org.postgresql.Driver" ; must be in classpath
|
db-port 5432
|
||||||
#_#_:ssl true
|
db-name "autoap"]
|
||||||
#_#_:sslfactory "org.postgresql.ssl.NonValidatingFactory"
|
{:classname "org.postgresql.Driver" ; must be in classpath
|
||||||
:subprotocol "postgresql"
|
#_#_:ssl true
|
||||||
:subname (str "//" db-host ":" db-port "/" db-name)
|
#_#_:sslfactory "org.postgresql.ssl.NonValidatingFactory"
|
||||||
:user "ap"
|
:subprotocol "postgresql"
|
||||||
:password "fifteen-invoices-imported!"}))
|
:subname (str "//" db-host ":" db-port "/" db-name)
|
||||||
|
:user "ap"
|
||||||
|
:password "fifteen-invoices-imported!"})))
|
||||||
|
|
||||||
(defn query [q]
|
(defn query [q]
|
||||||
(let [formatted (sql/format q)]
|
(let [formatted (sql/format q)]
|
||||||
|
|||||||
@@ -7,9 +7,11 @@
|
|||||||
[auto-ap.routes.graphql :as graphql]
|
[auto-ap.routes.graphql :as graphql]
|
||||||
[auto-ap.routes.vendors :as vendors]
|
[auto-ap.routes.vendors :as vendors]
|
||||||
[auto-ap.routes.checks :as checks]
|
[auto-ap.routes.checks :as checks]
|
||||||
|
[auto-ap.db.utils :as u]
|
||||||
[buddy.auth.backends.token :refer [jws-backend]]
|
[buddy.auth.backends.token :refer [jws-backend]]
|
||||||
[buddy.auth.middleware :refer [wrap-authentication
|
[buddy.auth.middleware :refer [wrap-authentication
|
||||||
wrap-authorization]]
|
wrap-authorization]]
|
||||||
|
[clojure.java.jdbc :as jdbc]
|
||||||
[compojure.core :refer :all]
|
[compojure.core :refer :all]
|
||||||
[compojure.route :as route]
|
[compojure.route :as route]
|
||||||
[config.core :refer [env]]
|
[config.core :refer [env]]
|
||||||
@@ -44,8 +46,19 @@
|
|||||||
api-routes
|
api-routes
|
||||||
static-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
|
(def app
|
||||||
(-> #'app-routes
|
(-> #'app-routes
|
||||||
|
(wrap-transaction)
|
||||||
(wrap-authorization auth-backend)
|
(wrap-authorization auth-backend)
|
||||||
(wrap-authentication auth-backend)
|
(wrap-authentication auth-backend)
|
||||||
(wrap-reload)
|
(wrap-reload)
|
||||||
|
|||||||
@@ -10,17 +10,14 @@
|
|||||||
[goog.string :as gstring]))
|
[goog.string :as gstring]))
|
||||||
|
|
||||||
;; TODO show busy
|
;; TODO show busy
|
||||||
;; TODO only when one company selected
|
|
||||||
;; TODO partial payments
|
;; TODO partial payments
|
||||||
;; TODO invoice status = paid when complete
|
;; TODO invoice status = paid when complete
|
||||||
;; TODO performance
|
;; TODO performance
|
||||||
;; TODO check numbers
|
|
||||||
;; TODO psql transactions
|
;; TODO psql transactions
|
||||||
;; TODO refactor graphql
|
;; TODO refactor graphql
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(defn query [params]
|
(defn query [params]
|
||||||
{:venia/queries [[:invoice_page
|
{:venia/queries [[:invoice_page
|
||||||
(assoc params
|
(assoc params
|
||||||
|
|||||||
Reference in New Issue
Block a user