-
Notifications
You must be signed in to change notification settings - Fork 1
/
user.cljc
314 lines (244 loc) · 10 KB
/
user.cljc
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
(ns kintone-client.user
(:require
#?(:clj [clojure.core.async :refer [go-loop <!]]
:cljs [cljs.core.async :refer [<!] :refer-macros [go-loop]])
[kintone-client.constant.path.user :as path]
[kintone-client.protocols :as pt]
[kintone-client.types :as t]))
(defn get-users
"Gets information of users.
opts
:ids - A list of User IDs.
sequence of integer
:codes - A list of User Codes (log-in names).
sequence of string
:offset - The offset.
The default value is 0 if this is not assigned.
integer
:size - The maximum number of User information to get.
The default value is 100 if this is not assigned.
integer"
[conn {:keys [ids codes offset size]}]
(let [params (cond-> {}
(some? ids) (assoc :ids ids)
(some? codes) (assoc :codes codes)
(some? offset) (assoc :offset offset)
(some? size) (assoc :size size))]
(pt/-get conn (pt/-user-api-url conn path/users) {:params params})))
(defn add-users
"Adds users to a kintone environment.
users - See API reference regarding user format.
sequence of map"
[conn users]
(pt/-post conn (pt/-user-api-url conn path/users) {:params {:users users}}))
(defn update-users
"Updates users of a kintone environment.
users - See API reference regarding user format.
sequence of map"
[conn users]
(pt/-put conn (pt/-user-api-url conn path/users) {:params {:users users}}))
(defn delete-users
"Deletes users from a Kintone environment.
user-codes - An array of user codes of users to be deleted.
sequence of string"
[conn user-codes]
(pt/-delete conn (pt/-user-api-url conn path/users) {:params {:codes user-codes}}))
(defn update-user-codes
"Updates user codes of users.
codes - sequence of map
A map includes these keys
:currentCode - The current User Code (log-in name).
string
:newCode - The new User Code (log-in name).
string"
[conn codes]
(pt/-put conn (pt/-user-api-url conn path/user-codes) {:params {:codes codes}}))
(defn get-organizations
"Gets information of organizations.
opts
:ids - A list of Organization IDs.
sequence of integer
:codes - A list of Organization Codes.
sequence of string
:offset - The offset.
The default value is 0 if this is not assigned.
integer
:size - The maximum number of Organization information to get.
The default value is 100 if this is not assigned.
integer"
[conn {:keys [ids codes offset size]}]
(let [params (cond-> {}
(some? ids) (assoc :ids ids)
(some? codes) (assoc :codes codes)
(some? offset) (assoc :offset offset)
(some? size) (assoc :size size))]
(pt/-get conn (pt/-user-api-url conn path/organizations) {:params params})))
(defn add-organizations
"Adds organizations to a kintone environment.
organizations - See API reference regarding organization format.
sequence of map"
[conn organizations]
(pt/-post conn (pt/-user-api-url conn path/organizations) {:params {:organizations organizations}}))
(defn update-organizations
"Updates organizations of a Kintone environment.
organizations - See API reference regarding organization format.
sequence of map"
[conn organizations]
(pt/-put conn (pt/-user-api-url conn path/organizations) {:params {:organizations organizations}}))
(defn delete-organizations
"Deletes organizations from a Kintone environment.
org-codes - An array of organization codes of organization to be deleted.
sequence of string"
[conn org-codes]
(pt/-delete conn (pt/-user-api-url conn path/organizations) {:params {:codes org-codes}}))
(defn update-organization-codes
"Updates organization codes of organizations.
codes - sequence of map
A map includes these keys
:currentCode - The current Organization Code.
string
:newCode - The new Organization Code.
string"
[conn codes]
(pt/-put conn (pt/-user-api-url conn path/organization-codes) {:params {:codes codes}}))
(defn update-user-services
"Updates the services that users can use in a kintone environment.
users - See API reference regarding user services format.
sequence of map"
[conn users]
(pt/-put conn (pt/-user-api-url conn path/user-services) {:params {:users users}}))
(defn get-groups
"Gets information of groups.
opts
:ids - A list of Group IDs.
sequence of integer
:codes - A list of Group Code.
sequence of string
:offset - The offset.
The default value is 0 if this is not assigned.
integer
:size - The maximum number of Group information to get.
The default value is 100 if this is not assigned.
integer"
[conn {:keys [ids codes offset size]}]
(let [params (cond-> {}
(some? ids) (assoc :ids ids)
(some? codes) (assoc :codes codes)
(some? offset) (assoc :offset offset)
(some? size) (assoc :size size))]
(pt/-get conn (pt/-user-api-url conn path/groups) {:params params})))
(defn get-user-organizations
"Gets information of organizations that a User belongs to, and Job Title information related to the organization.
user-code - The User's code (log-in name).
string"
[conn user-code]
(pt/-get conn (pt/-user-api-url conn path/user-organizations) {:params {:code user-code}}))
(defn get-user-groups
"Gets information of Groups that a User belongs to.
user-code - The User's code (log-in name)
string"
[conn user-code]
(pt/-get conn (pt/-user-api-url conn path/user-groups) {:params {:code user-code}}))
(defn get-organization-users
"Gets information of users that belong to the organization. Each of userTitles may have \"title\" of the job
code - The organization code.
string
opts
:offset - The offset.
The default value is 0 if this is not assigned.
integer
:size - The maximum number of Organization information to get.
The default value is 100 if this is not assigned.
integer"
[conn code {:keys [offset size]}]
(let [params (cond-> {:code code}
(some? offset) (assoc :offset offset)
(some? size) (assoc :size size))]
(pt/-get conn (pt/-user-api-url conn path/organization-users) {:params params})))
(defn get-group-users
"Gets information of Users that belong to a Group.
code - The group code.
string
opts
:offset - The offset.
The default value is 0 if this is not assigned.
integer
:size - The maximum number of Group information to get.
The default value is 100 if this is not assigned.
integer"
[conn code {:keys [offset size]}]
(let [params (cond-> {:code code}
(some? offset) (assoc :offset offset)
(some? size) (assoc :size size))]
(pt/-get conn (pt/-user-api-url conn path/group-users) {:params params})))
(defn- get-all-by
[conn func query-key response-key values]
(go-loop [[parted :as rests] (partition-all 100 values)
ret []]
(if (empty? parted)
(t/->KintoneResponse {response-key ret} nil)
(let [res (<! (func conn {query-key parted}))]
(if (:err res)
res
(recur (rest rests) (concat ret (-> res :res response-key))))))))
(defn- get-all
[conn func response-key]
(let [max-size 100]
(go-loop [ret []]
(let [res (<! (func conn {:offset (count ret)
:size max-size}))]
(if (:err res)
res
(let [users (-> res :res response-key)
ret (concat ret users)]
(if (< (count users) max-size)
(t/->KintoneResponse {response-key ret} nil)
(recur ret))))))))
(defn get-all-users
"Gets information of all users.
opts - If :ids and :codes are both set, an error will return. Only one can be set.
:ids - A list of User IDs.
sequence of integer
:codes - A list of User Codes (log-in names).
sequence of string"
[conn {:keys [ids codes]}]
(cond
(some? ids) (get-all-by conn get-users :ids :users ids)
(some? codes) (get-all-by conn get-users :codes :users codes)
:else (get-all conn get-users :users)))
(defn get-all-organizations
"Gets information of all organizations.
opts - If :ids and :codes are both set, an error will return. Only one can be set.
:ids - A list of User IDs.
sequence of integer
:codes - A list of User Codes (log-in names).
sequence of string"
[conn {:keys [ids codes]}]
(cond
(some? ids) (get-all-by conn get-organizations :ids :organizations ids)
(some? codes) (get-all-by conn get-organizations :codes :organizations codes)
:else (get-all conn get-organizations :organizations)))
(defn get-all-groups
"Gets information of all groups.
opts - If :ids and :codes are both set, an error will return. Only one can be set.
:ids - A list of User IDs.
sequence of integer
:codes - A list of User Codes (log-in names).
sequence of string"
[conn {:keys [ids codes]}]
(cond
(some? ids) (get-all-by conn get-groups :ids :groups ids)
(some? codes) (get-all-by conn get-groups :codes :groups codes)
:else (get-all conn get-groups :groups)))
(defn get-all-organization-users
"Gets information of all users that belong to the organization. Each of userTitles may have \"title\" of the job
code - The organization code.
string"
[conn code]
(get-all conn #(get-organization-users %1 code %2) :userTitles))
(defn get-all-group-users
"Gets information of all Users that belong to a Group.
code - The group code.
string"
[conn code]
(get-all conn #(get-group-users %1 code %2) :users))