diff --git a/project.clj b/project.clj index 3e786486..ada2d17e 100644 --- a/project.clj +++ b/project.clj @@ -17,7 +17,8 @@ ;; https://mvnrepository.com/artifact/postgresql/postgresql [postgresql/postgresql "9.3-1102.jdbc41"] [cljs-http "0.1.44"] - [org.clojure/core.async "0.3.465"]] + [org.clojure/core.async "0.3.465"] + [fogus/ring-edn "0.3.0"]] :plugins [[lein-ring "0.9.7"] [lein-cljsbuild "1.1.5"]] :clean-targets ^{:protect false} ["resources/public/js/compiled" "target"] diff --git a/src/clj/auto_ap/handler.clj b/src/clj/auto_ap/handler.clj index 889eef08..d5eba610 100644 --- a/src/clj/auto_ap/handler.clj +++ b/src/clj/auto_ap/handler.clj @@ -2,15 +2,22 @@ (:require [compojure.core :refer :all] [compojure.route :as route] [clojure.java.io :as io] + [clojure.string :as str] [auto-ap.parse :as parse] [ring.middleware.multipart-params :as mp] [ring.util.response :as response] [ring.middleware.defaults :refer [wrap-defaults site-defaults]] [ring.middleware.reload :refer [wrap-reload]] [ring.middleware.json :refer [wrap-json-response]] + [ring.middleware.edn :refer [wrap-edn-params]] [clojure.java.jdbc :as j])) -(use 'clojure.java.jdbc) +(defn snake->kebab [s] + (str/replace s #"_" "-")) + +(defn kebab->snake [s] + (str/replace s #"-" "_")) + (let [db-host "ec2-54-235-123-153.compute-1.amazonaws.com" db-port 5432 @@ -27,10 +34,45 @@ :password "de6117f8551364ac84ed31c1231941f53ab0b5470c9956f478b2025ab5a0fb8b"})) + + (defroutes app-routes (GET "/" [] (response/resource-response "index.html" {:root "public"})) (GET "/api/invoices" [] - (j/query db "SELECT * FROM invoices")) + {:status 200 + :body (pr-str (map (fn [m] + (into {} + (map + (fn [[k v]] + [(keyword (snake->kebab (name k))) v]) + m))) + (j/query db "SELECT * FROM invoices"))) + :headers {"Content-Type" "application/edn"}}) + (POST "/api/invoices" {:keys [edn-params]} + (prn edn-params ) + (doto + (j/insert-multi! db + :invoices + (map + (fn [e] + (into {} + (map + (fn [[k v]] + [(keyword (kebab->snake (name k))) v]) + e))) + (:rows edn-params))) + println) + + {:status 200 + :body (pr-str (map (fn [m] + (into {} + (map + (fn [[k v]] + [(keyword (snake->kebab (name k))) v]) + m))) + (j/query db "SELECT * FROM invoices"))) + :headers {"Content-Type" "application/edn"}} + ) (POST "/pdf-upload" {{ files "file"} :params :as params} (let [{:keys [filename tempfile]} files] @@ -45,4 +87,4 @@ (route/not-found "Not Found")) (def app - (wrap-json-response (mp/wrap-multipart-params (wrap-reload app-routes)))) + (wrap-edn-params (mp/wrap-multipart-params (wrap-reload app-routes)))) diff --git a/src/cljs/auto_ap/views.cljs b/src/cljs/auto_ap/views.cljs index dcfe81cb..be851089 100644 --- a/src/cljs/auto_ap/views.cljs +++ b/src/cljs/auto_ap/views.cljs @@ -62,19 +62,17 @@ [:th "Invoice #"] [:th "Date"] [:th "Amount"]]] - [:tbody (for [{:strs [customer_identifier invoice_number date total] :as i} @invoices] - ^{:key (str customer_identifier "-" invoice_number)} + [:tbody (for [{:keys [customer-identifier invoice-number date total id] :as i} @invoices] + ^{:key (str customer-identifier "-" invoice-number "-" date "-" total "-" id)} [:tr - [:td customer_identifier] - [:td invoice_number] + [:td customer-identifier] + [:td invoice-number] [:td date] [:td total]])]]])) {:component-did-mount (fn [] (go (->> (clj) (conj [::events/received-invoices]) (re-frame/dispatch))))})])