Update user address
This commit is contained in:
parent
8cd7f7705c
commit
601465ad39
|
@ -4,6 +4,30 @@ html, body {
|
|||
padding-top: 0px;
|
||||
}
|
||||
|
||||
.app {
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.container {
|
||||
padding-top: 20px;
|
||||
}
|
||||
|
||||
.profile-settings {
|
||||
padding-top: 20px;
|
||||
|
||||
.form-group {
|
||||
padding-top: 20px;
|
||||
}
|
||||
|
||||
button {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.profile-link {
|
||||
display: inline-block;
|
||||
padding-top: .425rem;
|
||||
|
|
|
@ -13,7 +13,7 @@ WHERE id = :id;
|
|||
-- :name update-user-address! :! :n
|
||||
UPDATE users
|
||||
SET address = :address
|
||||
WHERE id = :id;
|
||||
WHERE login = :login;
|
||||
|
||||
-- :name get-user :? :1
|
||||
-- :doc retrieve a user given the login.
|
||||
|
|
|
@ -24,3 +24,8 @@
|
|||
[login]
|
||||
(jdbc/with-db-connection [con-db *db*]
|
||||
(some? (db/get-user con-db {:login login}))))
|
||||
|
||||
(defn update-user-address
|
||||
[login address]
|
||||
(jdbc/with-db-connection [con-db *db*]
|
||||
(db/update-user-address! con-db {:login login :address address})))
|
||||
|
|
|
@ -4,7 +4,8 @@
|
|||
[schema.core :as s]
|
||||
[compojure.api.meta :refer [restructure-param]]
|
||||
[buddy.auth.accessrules :refer [restrict]]
|
||||
[buddy.auth :refer [authenticated?]]))
|
||||
[buddy.auth :refer [authenticated?]]
|
||||
[commiteth.db.users :as users]))
|
||||
|
||||
(defn access-error [_ _]
|
||||
(unauthorized {:error "unauthorized"}))
|
||||
|
@ -24,43 +25,21 @@
|
|||
(defapi service-routes
|
||||
{:swagger {:ui "/swagger-ui"
|
||||
:spec "/swagger.json"
|
||||
:data {:info {:version "1.0.0"
|
||||
:title "Sample API"
|
||||
:description "Sample Services"}}}}
|
||||
:data {:info {:version "0.1"
|
||||
:title "commitETH API"
|
||||
:description "commitETH API"}}}}
|
||||
|
||||
(GET "/authenticated" []
|
||||
:auth-rules authenticated?
|
||||
:current-user user
|
||||
(ok {:user user}))
|
||||
|
||||
(context "/api" []
|
||||
:tags ["thingie"]
|
||||
|
||||
(GET "/plus" []
|
||||
:return Long
|
||||
:query-params [x :- Long, {y :- Long 1}]
|
||||
:summary "x+y with query-parameters. y defaults to 1."
|
||||
(ok (+ x y)))
|
||||
|
||||
(POST "/minus" []
|
||||
:return Long
|
||||
:body-params [x :- Long, y :- Long]
|
||||
:summary "x-y with body-parameters."
|
||||
(ok (- x y)))
|
||||
|
||||
(GET "/times/:x/:y" []
|
||||
:return Long
|
||||
:path-params [x :- Long, y :- Long]
|
||||
:summary "x*y with path-parameters"
|
||||
(ok (* x y)))
|
||||
|
||||
(POST "/divide" []
|
||||
:return Double
|
||||
:form-params [x :- Long, y :- Long]
|
||||
:summary "x/y with form-parameters"
|
||||
(ok (/ x y)))
|
||||
|
||||
(GET "/power" []
|
||||
:return Long
|
||||
:header-params [x :- Long, y :- Long]
|
||||
:summary "x^y with header-parameters"
|
||||
(ok (long (Math/pow x y))))))
|
||||
(POST "/user/address" []
|
||||
:auth-rules authenticated?
|
||||
:body-params [user :- String, address :- String]
|
||||
:summary "Update user address"
|
||||
(let [result (users/update-user-address user address)]
|
||||
(if (= 1 result)
|
||||
(ok)
|
||||
(internal-server-error))))))
|
||||
|
|
|
@ -8,7 +8,8 @@
|
|||
[ajax.core :refer [GET POST]]
|
||||
[commiteth.ajax :refer [load-interceptors!]]
|
||||
[commiteth.handlers]
|
||||
[commiteth.subscriptions])
|
||||
[commiteth.subscriptions]
|
||||
[reagent.core :as reagent])
|
||||
(:import goog.History))
|
||||
|
||||
(defn nav-link [uri title page collapsed?]
|
||||
|
@ -21,8 +22,9 @@
|
|||
(defn login-link []
|
||||
(let [user (rf/subscribe [:user])]
|
||||
(if-let [login (:login @user)]
|
||||
[:li.pull-right
|
||||
[:span.profile-link (str "Logged in as " login)]
|
||||
[:li.pull-right.p
|
||||
[:span.profile-link "Logged in as "
|
||||
[:a {:href "/#/profile"} login]]
|
||||
[:a.btn.btn-primary.btn-sm {:href "/logout"} "Logout"]]
|
||||
[:li.pull-right
|
||||
[:a.btn.btn-social.btn-github
|
||||
|
@ -43,17 +45,53 @@
|
|||
[login-link]]]]))
|
||||
|
||||
(defn home-page []
|
||||
[:div.container
|
||||
[:div.jumbotron
|
||||
[:h3 "Welcome to commitETH"]]])
|
||||
[:div
|
||||
[:h3 "Welcome to commitETH"]])
|
||||
|
||||
(defn input [{:keys [value-path]}]
|
||||
(let [val (reagent/atom nil)
|
||||
save #(let [v (-> @val str clojure.string/trim)]
|
||||
(when (seq v)
|
||||
(rf/dispatch [:assoc-in value-path v])))]
|
||||
(fn [props]
|
||||
[:input.form-control
|
||||
(merge props {:type "text"
|
||||
:value @val
|
||||
:auto-focus true
|
||||
:on-blur save
|
||||
:on-change #(reset! val (-> % .-target .-value))})])))
|
||||
|
||||
(defn save-address
|
||||
[login address]
|
||||
(fn [_]
|
||||
(rf/dispatch [:save-user-address login address])))
|
||||
|
||||
(defn address-settings []
|
||||
(let [user (rf/subscribe [:user])
|
||||
login (:login @user)
|
||||
address (rf/subscribe [:address])]
|
||||
(fn []
|
||||
[:div.form-group
|
||||
[:label "Address"]
|
||||
[input {:placeholder "Address"
|
||||
:value-path [:address]}]
|
||||
[:button.btn.btn-primary.btn-lg
|
||||
{:on-click (save-address login @address)}
|
||||
"Save"]])))
|
||||
|
||||
(defn profile-page []
|
||||
[:div.profile-settings
|
||||
[:h1 "Profile"]
|
||||
[address-settings]])
|
||||
|
||||
(def pages
|
||||
{:home #'home-page})
|
||||
{:home #'home-page
|
||||
:profile #'profile-page})
|
||||
|
||||
(defn page []
|
||||
[:div
|
||||
[:div.app
|
||||
[navbar]
|
||||
[(pages @(rf/subscribe [:page]))]])
|
||||
[:div.container [(pages @(rf/subscribe [:page]))]]])
|
||||
|
||||
;; -------------------------
|
||||
;; Routes
|
||||
|
@ -61,6 +99,8 @@
|
|||
|
||||
(secretary/defroute "/" []
|
||||
(rf/dispatch [:set-active-page :home]))
|
||||
(secretary/defroute "/profile" []
|
||||
(rf/dispatch [:set-active-page :profile]))
|
||||
|
||||
;; -------------------------
|
||||
;; History
|
||||
|
|
|
@ -2,4 +2,5 @@
|
|||
|
||||
(def default-db
|
||||
{:page :home
|
||||
:user nil})
|
||||
:user nil
|
||||
:address nil})
|
||||
|
|
|
@ -1,12 +1,18 @@
|
|||
(ns commiteth.handlers
|
||||
(:require [commiteth.db :as db]
|
||||
[re-frame.core :refer [dispatch reg-event-db]]))
|
||||
[re-frame.core :refer [dispatch reg-event-db]]
|
||||
[ajax.core :refer [GET POST]]))
|
||||
|
||||
(reg-event-db
|
||||
:initialize-db
|
||||
(fn [_ _]
|
||||
db/default-db))
|
||||
|
||||
(reg-event-db
|
||||
:assoc-in
|
||||
(fn [db [_ path value]]
|
||||
(assoc-in db path value)))
|
||||
|
||||
(reg-event-db
|
||||
:set-active-page
|
||||
(fn [db [_ page]]
|
||||
|
@ -16,3 +22,20 @@
|
|||
:set-active-user
|
||||
(fn [db [_ user]]
|
||||
(assoc db :user user)))
|
||||
|
||||
(reg-event-db
|
||||
:set-user-address
|
||||
(fn [db [_ address]]
|
||||
(assoc db :address address)))
|
||||
|
||||
(defn save-user-address [params]
|
||||
(POST "/api/user/address"
|
||||
{:headers {"Accept" "application/transit+json"}
|
||||
:params params
|
||||
:handler #(println %)}))
|
||||
|
||||
(reg-event-db
|
||||
:save-user-address
|
||||
(fn [db [_ user address]]
|
||||
(save-user-address {:user user :address address})
|
||||
db))
|
||||
|
|
|
@ -10,3 +10,8 @@
|
|||
:user
|
||||
(fn [db _]
|
||||
(:user db)))
|
||||
|
||||
(reg-sub
|
||||
:address
|
||||
(fn [db _]
|
||||
(:address db)))
|
||||
|
|
Loading…
Reference in New Issue