82 lines
1.9 KiB
Clojure
82 lines
1.9 KiB
Clojure
(ns auto-ap.db.utils
|
|
(:require [clojure.string :as str]
|
|
[clojure.edn :as edn]
|
|
[clojure.java.jdbc :as j]
|
|
[config.core :refer [env]]
|
|
[honeysql.core :as sql]))
|
|
|
|
(defn snake->kebab [s]
|
|
(str/replace s #"_" "-"))
|
|
|
|
(defn kebab->snake [s]
|
|
(str/replace s #"-" "_"))
|
|
|
|
(defn db->clj
|
|
([x]
|
|
(let [kebabed (into {}
|
|
(map
|
|
(fn [[k v]]
|
|
[(keyword (snake->kebab (name k))) v])
|
|
x))
|
|
merged (if (:data kebabed)
|
|
(update kebabed :data edn/read-string)
|
|
kebabed)]
|
|
merged)))
|
|
|
|
(defn snake [x]
|
|
(into {}
|
|
(map
|
|
(fn [[k v]]
|
|
[(keyword (kebab->snake (name k))) v])
|
|
x)))
|
|
|
|
(defn clj->db [x]
|
|
(let [snaked (snake x)
|
|
unmerged (if (:data snaked)
|
|
(update snaked :data pr-str)
|
|
snaked)]
|
|
unmerged))
|
|
|
|
|
|
|
|
(defn merge-data [{:keys [data] :as x}]
|
|
(merge x (edn/read-string data)))
|
|
|
|
(def ^{:dynamic true} current-conn nil)
|
|
|
|
(defn get-conn []
|
|
(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)]
|
|
(println "Executing query " q " SQL: " formatted)
|
|
|
|
(map db->clj (j/query (get-conn) formatted))))
|
|
|
|
(defn execute! [q]
|
|
(let [formatted (sql/format q)]
|
|
(println "Executing query " q " SQL: " formatted)
|
|
(j/execute! (get-conn) formatted)))
|
|
|
|
(defn limited-companies [id]
|
|
(cond
|
|
(= (:role id) "none")
|
|
[]
|
|
|
|
(= (:role id) "admin")
|
|
nil
|
|
|
|
(= (:role id) "user")
|
|
(:companies id [])))
|