|
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