|
3 | 3 | [restful-crud.models.user :refer [User]]
|
4 | 4 | [buddy.hashers :as hashers]
|
5 | 5 | [clojure.set :refer [rename-keys]]
|
6 |
| - [toucan.db :as db] |
7 | 6 | [restful-crud.restful :as restful]
|
8 |
| - [ring.util.http-response :refer [ok not-found created]] |
9 |
| - [compojure.api.sweet :refer [GET POST PUT DELETE]] |
10 | 7 | [restful-crud.string-util :as str]))
|
11 | 8 |
|
12 | 9 | (defn valid-username? [name]
|
|
20 | 17 | :password (s/constrained s/Str valid-password?)
|
21 | 18 | :email (s/constrained s/Str str/email?)})
|
22 | 19 |
|
23 |
| -(defn id->created [id] |
24 |
| - (created (str "/users/" id) {:id id})) |
25 |
| - |
26 | 20 | (defn canonicalize-user-req [user-req]
|
27 | 21 | (-> (update user-req :password hashers/derive)
|
28 | 22 | (rename-keys {:password :password_hash})))
|
29 | 23 |
|
30 |
| -(defn create-user-handler [create-user-req] |
31 |
| - (->> (canonicalize-user-req create-user-req) |
32 |
| - (db/insert! User) |
33 |
| - :id |
34 |
| - id->created)) |
35 |
| - |
36 |
| -(defn delete-user-handler [user-id] |
37 |
| - (db/delete! User :id user-id) |
38 |
| - (ok)) |
39 |
| - |
40 |
| -(defn get-users-handler [] |
41 |
| - (->> (db/select User) |
42 |
| - (map #(dissoc % :password_hash)) |
43 |
| - ok)) |
44 |
| - |
45 |
| -(defn user->response [user] |
46 |
| - (if user |
47 |
| - (ok user) |
48 |
| - (not-found))) |
49 |
| - |
50 |
| -(defn get-user-handler [user-id] |
51 |
| - (-> (User user-id) |
52 |
| - (dissoc :password_hash) |
53 |
| - user->response)) |
54 |
| - |
55 |
| -(defn update-user-handler [id update-user-req] |
56 |
| - (db/update! User id (canonicalize-user-req update-user-req)) |
57 |
| - (ok)) |
58 |
| - |
59 |
| -(def user-routes |
60 |
| - [(POST "/users" [] |
61 |
| - :body [create-user-req UserRequestSchema] |
62 |
| - (create-user-handler create-user-req)) |
63 |
| - (GET "/users" [] |
64 |
| - (get-users-handler)) |
65 |
| - (GET "/users/:id" [] |
66 |
| - :path-params [id :- s/Int] |
67 |
| - (get-user-handler id)) |
68 |
| - (PUT "/users/:id" [] |
69 |
| - :path-params [id :- s/Int] |
70 |
| - :body [update-user-req UserRequestSchema] |
71 |
| - (update-user-handler id update-user-req)) |
72 |
| - (DELETE "/users/:id" [] |
73 |
| - :path-params [id :- s/Int] |
74 |
| - (delete-user-handler id))]) |
75 |
| - |
76 | 24 | (def user-entity-route
|
77 | 25 | (restful/resource {:model User
|
78 | 26 | :name "users"
|
|
0 commit comments