-
Notifications
You must be signed in to change notification settings - Fork 0
/
deal.clj
77 lines (57 loc) · 2.1 KB
/
deal.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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
(ns hubspot.deal
(:require [clojure.spec.alpha :as s]
[hubspot.http :as h]
[hubspot.spec :as hs]
[toolbelt.core :as tb]))
;; ==============================================================================
;; spec =========================================================================
;; ==============================================================================
(s/def ::vid
integer?)
(s/def ::associatedCompanyIds
(s/+ ::vid))
(s/def ::associatedVids
(s/+ ::vid))
(s/def ::associations
(s/keys :opt-un [::associatedCompanyIds ::associatedVids]))
;; ==============================================================================
;; HTTP API =====================================================================
;; ==============================================================================
(defn- params->properties
[params]
(reduce (fn [acc [k v]] (conj acc {:name k :value v})) [] params))
(defn create!
"Create a new deal."
([params]
(create! params {}))
([{:keys [properties associations]} opts]
(h/post-req "deals/v1/deal"
(-> opts
(assoc-in [:params :associations] associations)
(assoc-in [:params :properties] (params->properties properties))))))
(defn fetch
"Fetch a deal by vid."
([id]
(fetch id {} {}))
([id params]
(fetch id params {}))
([id params opts]
(h/get-req (format "deals/v1/deal/%s" id)
(assoc opts :params params))))
(defn fetch-by-contact
"Fetch a deal by its associated contact."
([contact-id]
(fetch-by-contact contact-id {}))
([contact-id opts]
(h/get-req (format "deals/v1/deal/associated/contact/%s/paged" contact-id)
opts)))
(defn update!
([id params]
(update! id params {}))
([id {:keys [properties associations]} opts]
(let [params (tb/assoc-when
{}
:associations associations
:properties (when-some [ps properties]
(params->properties properties)))]
(h/put-req (format "deals/v1/deal/%s" id) (assoc opts :params params)))))