UNPKG

6.28 kBJavaScriptView Raw
1const Joi = require('@hapi/joi');
2const { validate, prepare } = require('../../utils/options');
3
4// Validation
5const _id = Joi.number().min(1);
6const _ids = Joi.string().min(3);
7const _user_id = Joi.number().min(1);
8const _group_id = Joi.number().min(1);
9const _membership_id = Joi.number().min(1);
10const _data = Joi.object();
11
12// Initialize Endpoint
13module.exports = (options = {}) => {
14 const { error } = validate(options);
15 if (error) throw new Error(error.details[0].message);
16
17 const { url, headers } = prepare(options);
18
19 return {
20 /**
21 * List Memberships
22 *
23 * GET /api/v2/group_memberships.json
24 * GET /api/v2/users/{user_id}/group_memberships.json
25 * GET /api/v2/groups/{group_id}/memberships.json
26 * https://developer.zendesk.com/rest_api/docs/support/group_memberships#list-memberships
27 */
28 list: (options = {}) => {
29 const { error } = Joi.object({
30 user_id: _user_id,
31 group_id: _group_id
32 }).validate(options);
33 if (error) throw new Error(error.details[0].message);
34
35 const { user_id, group_id } = options;
36 if (user_id && group_id)
37 throw new Error('either "user_id" or "group_id" may be set, not both');
38
39 return {
40 method: 'GET',
41 url: `${url}/api/v2/${
42 user_id
43 ? `users/${user_id}/group_memberships.json`
44 : group_id
45 ? `groups/${group_id}/memberships.json`
46 : `group_memberships.json`
47 }`,
48 headers
49 };
50 },
51
52 /**
53 * List Assignable Memberships
54 *
55 * GET /api/v2/group_memberships/assignable.json
56 * GET /api/v2/groups/{group_id}/memberships/assignable.json
57 * https://developer.zendesk.com/rest_api/docs/support/group_memberships#list-assignable-memberships
58 */
59 assignable: (options = {}) => {
60 const { error } = Joi.object({
61 group_id: _group_id
62 }).validate(options);
63 if (error) throw new Error(error.details[0].message);
64
65 const { group_id } = options;
66
67 return {
68 method: 'GET',
69 url: `${url}/api/v2/${
70 group_id
71 ? `groups/${group_id}/memberships/assignable.json`
72 : `group_memberships/assignable.json`
73 }`,
74 headers
75 };
76 },
77
78 /**
79 * Show Membership
80 *
81 * GET /api/v2/group_memberships/{id}.json
82 * GET /api/v2/users/{user_id}/group_memberships/{id}.json
83 * https://developer.zendesk.com/rest_api/docs/support/group_memberships#show-membership
84 */
85 show: (options = {}) => {
86 const { error } = Joi.object({
87 id: _id.required(),
88 user_id: _user_id
89 }).validate(options);
90 if (error) throw new Error(error.details[0].message);
91
92 const { id, user_id = '' } = options;
93 return {
94 method: 'GET',
95 url: `${url}/api/v2${
96 user_id ? `/users/${user_id}` : ''
97 }/group_memberships/${id}.json`,
98 headers
99 };
100 },
101
102 /**
103 * Create Membership
104 *
105 * POST /api/v2/group_memberships.json
106 * POST /api/v2/users/{user_id}/group_memberships.json
107 * https://developer.zendesk.com/rest_api/docs/support/group_memberships#create-membership
108 */
109 create: (options = {}) => {
110 const { error } = Joi.object({
111 user_id: _user_id,
112 data: _data.required()
113 }).validate(options);
114 if (error) throw new Error(error.details[0].message);
115
116 const { user_id = '', data } = options;
117 return {
118 method: 'POST',
119 url: `${url}/api/v2${
120 user_id ? `/users/${user_id}` : ''
121 }/group_memberships.json`,
122 headers,
123 data
124 };
125 },
126
127 /**
128 * Bulk Create Memberships
129 *
130 * POST /api/v2/group_memberships/create_many.json
131 * https://developer.zendesk.com/rest_api/docs/support/group_memberships#bulk-create-memberships
132 */
133 create_many: (options = {}) => {
134 const { error } = Joi.object({
135 data: _data.required()
136 }).validate(options);
137 if (error) throw new Error(error.details[0].message);
138
139 const { data } = options;
140 return {
141 method: 'POST',
142 url: `${url}/api/v2/group_memberships/create_many.json`,
143 headers,
144 data
145 };
146 },
147
148 /**
149 * Delete Membership
150 *
151 * DELETE /api/v2/group_memberships/{id}.json
152 * DELETE /api/v2/users/{user_id}/group_memberships/{id}.json
153 * https://developer.zendesk.com/rest_api/docs/support/group_memberships#delete-membership
154 */
155 delete: (options = {}) => {
156 const { error } = Joi.object({
157 id: _id.required(),
158 user_id: _user_id
159 }).validate(options);
160 if (error) throw new Error(error.details[0].message);
161
162 const { id, user_id = '' } = options;
163 return {
164 method: 'DELETE',
165 url: `${url}/api/v2${
166 user_id ? `/users/${user_id}` : ''
167 }/group_memberships/${id}.json`,
168 headers
169 };
170 },
171
172 /**
173 * Bulk Delete Memberships
174 *
175 * DELETE /api/v2/group_memberships/destroy_many.json?ids={group_membership_ids}
176 * https://developer.zendesk.com/rest_api/docs/support/group_memberships#bulk-delete-memberships
177 */
178 delete_many: (options = {}) => {
179 const { error } = Joi.object({
180 ids: _ids.required()
181 }).validate(options);
182 if (error) throw new Error(error.details[0].message);
183
184 const { ids } = options;
185 return {
186 method: 'DELETE',
187 url: `${url}/api/v2/group_memberships/destroy_many.json?ids=${ids}`,
188 headers
189 };
190 },
191
192 /**
193 * Set Membership as Default
194 *
195 * PUT /api/v2/users/{user_id}/group_memberships/{membership_id}/make_default.json
196 * https://developer.zendesk.com/rest_api/docs/support/group_memberships#set-membership-as-default
197 */
198 default: (options = {}) => {
199 const { error } = Joi.object({
200 user_id: _user_id.required(),
201 membership_id: _membership_id.required()
202 }).validate(options);
203 if (error) throw new Error(error.details[0].message);
204
205 const { user_id, membership_id } = options;
206 return {
207 method: 'PUT',
208 url: `${url}/api/v2/users/${user_id}/group_memberships/${membership_id}/make_default.json`,
209 headers
210 };
211 }
212 };
213};