UNPKG

5.79 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(1);
7const _user_id = Joi.number().min(1);
8const _organization_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/organization_memberships.json
24 * GET /api/v2/users/{user_id}/organization_memberships.json
25 * GET /api/v2/organizations/{organization_id}/organization_memberships.json
26 * https://developer.zendesk.com/rest_api/docs/support/organization_memberships#list-memberships
27 */
28 list: (options = {}) => {
29 const { error } = Joi.object({
30 user_id: _user_id,
31 organization_id: _organization_id
32 }).validate(options);
33 if (error) throw new Error(error.details[0].message);
34
35 const { user_id, organization_id } = options;
36 if (user_id && organization_id)
37 throw new Error(
38 'either "user_id" or "organization_id" may be set, not both'
39 );
40
41 return {
42 method: 'GET',
43 url: `${url}/api/v2/${
44 user_id
45 ? `users/${user_id}/organization_memberships.json`
46 : organization_id
47 ? `organizations/${organization_id}/organization_memberships.json`
48 : `organization_memberships.json`
49 }`,
50 headers
51 };
52 },
53
54 /**
55 * Show Membership
56 *
57 * GET /api/v2/organization_memberships/{id}.json
58 * GET /api/v2/users/{user_id}/organization_memberships/{id}.json
59 * https://developer.zendesk.com/rest_api/docs/support/organization_memberships#show-membership
60 */
61 show: (options = {}) => {
62 const { error } = Joi.object({
63 id: _id.required(),
64 user_id: _user_id
65 }).validate(options);
66 if (error) throw new Error(error.details[0].message);
67
68 const { id, user_id = '' } = options;
69 return {
70 method: 'GET',
71 url: `${url}/api/v2${
72 user_id ? `/users/${user_id}` : ''
73 }/organization_memberships/${id}.json`,
74 headers
75 };
76 },
77
78 /**
79 * Create Membership
80 *
81 * POST /api/v2/organization_memberships.json
82 * POST /api/v2/users/{user_id}/organization_memberships.json
83 * https://developer.zendesk.com/rest_api/docs/support/organization_memberships#create-membership
84 */
85 create: (options = {}) => {
86 const { error } = Joi.object({
87 user_id: _user_id,
88 data: _data.required()
89 }).validate(options);
90 if (error) throw new Error(error.details[0].message);
91
92 const { user_id = '', data } = options;
93 return {
94 method: 'POST',
95 url: `${url}/api/v2${
96 user_id ? `/users/${user_id}` : ''
97 }/organization_memberships.json`,
98 headers,
99 data
100 };
101 },
102
103 /**
104 * Create Many Memberships
105 *
106 * POST /api/v2/organization_memberships/create_many.json
107 * https://developer.zendesk.com/rest_api/docs/support/organization_memberships#create-many-memberships
108 */
109 create_many: (options = {}) => {
110 const { error } = Joi.object({
111 data: _data.required()
112 }).validate(options);
113 if (error) throw new Error(error.details[0].message);
114
115 const { data } = options;
116 return {
117 method: 'POST',
118 url: `${url}/api/v2/organization_memberships/create_many.json`,
119 headers,
120 data
121 };
122 },
123
124 /**
125 * Delete Membership
126 *
127 * DELETE /api/v2/organization_memberships/{id}.json
128 * DELETE /api/v2/users/{user_id}/organization_memberships/{id}.json
129 * https://developer.zendesk.com/rest_api/docs/support/organization_memberships#delete-membership
130 */
131 delete: (options = {}) => {
132 const { error } = Joi.object({
133 id: _id.required(),
134 user_id: _user_id
135 }).validate(options);
136 if (error) throw new Error(error.details[0].message);
137
138 const { id, user_id = '' } = options;
139 return {
140 method: 'DELETE',
141 url: `${url}/api/v2${
142 user_id ? `/users/${user_id}` : ''
143 }/organization_memberships/${id}.json`,
144 headers
145 };
146 },
147
148 /**
149 * Bulk Delete Memberships
150 *
151 * DELETE /api/v2/organization_memberships/destroy_many.json?ids={ids}
152 * https://developer.zendesk.com/rest_api/docs/support/organization_memberships#bulk-delete-memberships
153 */
154 delete_many: (options = {}) => {
155 const { error } = Joi.object({
156 ids: _ids.required()
157 }).validate(options);
158 if (error) throw new Error(error.details[0].message);
159
160 const { ids } = options;
161 return {
162 method: 'DELETE',
163 url: `${url}/api/v2/organization_memberships/destroy_many.json?ids=${ids}`,
164 headers
165 };
166 },
167
168 /**
169 * Set Membership as Default
170 *
171 * PUT /api/v2/users/{id}/organization_memberships/{membership_id}/make_default.json
172 * https://developer.zendesk.com/rest_api/docs/support/organization_memberships#set-membership-as-default
173 */
174 default: (options = {}) => {
175 const { error } = Joi.object({
176 id: _id.required(),
177 membership_id: _membership_id.required()
178 }).validate(options);
179 if (error) throw new Error(error.details[0].message);
180
181 const { id, membership_id } = options;
182 return {
183 method: 'PUT',
184 url: `${url}/api/v2/users/${id}/organization_memberships/${membership_id}/make_default.json`,
185 headers
186 };
187 }
188 };
189};