forked from clj-nakano/situated-program-challenge
/
venue.clj
36 lines (33 loc) · 1.43 KB
/
venue.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
(ns rest-server.handler.venue
(:require [ataraxy.response :as response]
[integrant.core :as ig]
[rest-server.boundary.db.venue :as db.venue]))
(defn venue-with-address [{:keys [id name postal-code prefecture city street1 street2] :as venue}]
(when venue
{:venue-id id
:venue-name name
:address {:postal-code postal-code
:prefecture prefecture
:city city
:address1 street1
:address2 street2}}))
(defmethod ig/init-key ::list [_ {:keys [db]}]
(fn [{[_ group-id] :ataraxy/result}]
[::response/ok (map venue-with-address
(db.venue/list-venues db
group-id
:venue-type/physical))]))
(defmethod ig/init-key ::create [_ {:keys [db]}]
(fn [{[_ group-id {:keys [address] :as venue}] :ataraxy/result}]
(let [venue' {:name (:venue-name venue)
:postal-code (:postal-code address)
:prefecture (:prefecture address)
:city (:city address)
:street1 (:address1 address)
:street2 (:address2 address)
:group-id group-id
:venue-type :venue-type/physical}
id (db.venue/create-venue db venue')]
[::response/ok (-> venue'
(assoc :id id)
venue-with-address)])))