@@ -17,7 +17,13 @@ const {
17
17
const UserMeetingSettings = models . UserMeetingSettings
18
18
const { Interviews : InterviewConstants } = require ( '../../app-constants' )
19
19
const esClient = helper . getESClient ( )
20
- const NylasService = require ( './NylasService' )
20
+ const {
21
+ getAvailableTimeFromSchedulingPage,
22
+ getTimezoneFromSchedulingPage,
23
+ getAccessToken,
24
+ getExistingCalendars,
25
+ getPrimaryCalendar
26
+ } = require ( './NylasService' )
21
27
const jwt = require ( 'jsonwebtoken' )
22
28
23
29
/**
@@ -48,14 +54,18 @@ function stripUnwantedData (userMeetingSettings) {
48
54
return userMeetingSettings
49
55
}
50
56
57
+ function handleUserMeetingSettingsData ( data , shouldNotStripUnwantedData ) {
58
+ return shouldNotStripUnwantedData ? data : stripUnwantedData ( data )
59
+ }
60
+
51
61
/**
52
62
* Get UserMeetingsettings by userid
53
63
* @param {Object } currentUser the user who perform this operation.
54
64
* @param {String } userId the user id
55
65
* @param {Boolean } fromDb flag if query db for data or not
56
66
* @returns {Object } the userMeetingSetting object
57
67
*/
58
- async function getUserMeetingSettingsByUserId ( currentUser , userId , fromDb ) {
68
+ async function getUserMeetingSettingsByUserId ( currentUser , userId , fromDb , shouldNotStripUnwantedData ) {
59
69
// check permission
60
70
await ensureUserIsPermitted ( currentUser , userId )
61
71
if ( ! fromDb ) {
@@ -68,7 +78,7 @@ async function getUserMeetingSettingsByUserId (currentUser, userId, fromDb) {
68
78
// extract interviews from ES object
69
79
const userMeetingSettings = _ . get ( userMeetingSettingsES , 'body._source' , [ ] )
70
80
if ( userMeetingSettings ) {
71
- return stripUnwantedData ( userMeetingSettings )
81
+ return handleUserMeetingSettingsData ( userMeetingSettings , shouldNotStripUnwantedData )
72
82
}
73
83
throw new errors . NotFoundError ( `The userMeetingSettings for userId=${ userId } not found.` )
74
84
} catch ( err ) {
@@ -88,12 +98,13 @@ async function getUserMeetingSettingsByUserId (currentUser, userId, fromDb) {
88
98
throw new errors . NotFoundError ( `The userMeetingSettings for userId=${ userId } not found.` )
89
99
}
90
100
91
- return stripUnwantedData ( userMeetingSettings . dataValues )
101
+ return handleUserMeetingSettingsData ( userMeetingSettings , shouldNotStripUnwantedData )
92
102
}
93
103
getUserMeetingSettingsByUserId . schema = Joi . object ( ) . keys ( {
94
104
currentUser : Joi . object ( ) . required ( ) ,
95
105
userId : Joi . string ( ) . uuid ( ) . required ( ) ,
96
- fromDb : Joi . boolean ( )
106
+ fromDb : Joi . boolean ( ) ,
107
+ shouldNotStripUnwantedData : Joi . boolean ( )
97
108
} ) . required ( )
98
109
99
110
// TODO document
@@ -102,10 +113,11 @@ async function createUserMeetingSettingsIfNotExisting (currentUser, userId, cale
102
113
await ensureUserIsPermitted ( currentUser , userId )
103
114
104
115
let userMeetingSettings = await UserMeetingSettings . findById ( userId , false )
116
+
105
117
const payload = {
106
118
id : userId ,
107
- defaultAvailableTime : await NylasService . getAvailableTimeFromSchedulingPage ( schedulingPage ) ,
108
- defaultTimezone : await NylasService . getTimezoneFromSchedulingPage ( schedulingPage ) ,
119
+ defaultAvailableTime : await getAvailableTimeFromSchedulingPage ( schedulingPage ) ,
120
+ defaultTimezone : await getTimezoneFromSchedulingPage ( schedulingPage ) ,
109
121
createdBy : await helper . getUserId ( currentUser . userId ) ,
110
122
nylasCalendars : [ ] . concat ( {
111
123
accessToken : calendar . accessToken ,
@@ -115,6 +127,7 @@ async function createUserMeetingSettingsIfNotExisting (currentUser, userId, cale
115
127
isPrimary : calendar . is_primary
116
128
} )
117
129
}
130
+
118
131
if ( _ . isNil ( userMeetingSettings ) ) {
119
132
userMeetingSettings = await UserMeetingSettings . create ( payload , { transaction : transaction } )
120
133
await processCreate ( userMeetingSettings . toJSON ( ) )
@@ -178,21 +191,19 @@ async function handleConnectCalendarCallback (reqQuery) {
178
191
179
192
try {
180
193
// getting user's accessToken from Nylas using 'code' found in request query
181
- const { accessToken, accountId, provider } = await NylasService . getAccessToken ( reqQuery . code )
182
-
194
+ const { accessToken, accountId, provider } = await getAccessToken ( reqQuery . code )
183
195
// view https://developer.nylas.com/docs/api/#post/oauth/token for error response schema
184
196
if ( ! accessToken || ! accountId ) {
185
197
throw new errors . BadRequestError ( 'Error during getting access token for the calendar.' )
186
198
}
187
199
188
200
// getting user's all existing calendars
189
- const calendars = await NylasService . getExistingCalendars ( accessToken )
190
-
201
+ const calendars = await getExistingCalendars ( accessToken )
191
202
if ( ! Array . isArray ( calendars ) || calendars . length < 1 ) {
192
203
throw new errors . BadRequestError ( 'Error getting calendar data for the user.' )
193
204
}
194
205
195
- const primaryCalendar = NylasService . getPrimaryCalendar ( calendars )
206
+ const primaryCalendar = getPrimaryCalendar ( calendars )
196
207
if ( ! primaryCalendar ) {
197
208
throw new errors . NotFoundError ( 'Could not find any writable calendar.' )
198
209
}
@@ -215,6 +226,9 @@ async function handleConnectCalendarCallback (reqQuery) {
215
226
216
227
// reuse this method to create UserMeetingSettings object
217
228
if ( _ . isNil ( userMeetingSettings ) ) {
229
+ // method 'createUserMeetingSettingsIfNotExisting' expects keys in Nylas backend
230
+ // API format, so extend calendarDetails object with 'is_primary' key
231
+ _ . extend ( calendarDetails , { is_primary : calendarDetails . isPrimary } )
218
232
userMeetingSettings = await createUserMeetingSettingsIfNotExisting (
219
233
currentUser ,
220
234
userId ,
@@ -272,7 +286,7 @@ async function deleteUserCalendar (currentUser, reqParams) {
272
286
await ensureUserIsPermitted ( currentUser , reqParams . userId )
273
287
274
288
try {
275
- const userMeetingSettings = await getUserMeetingSettingsByUserId ( currentUser , reqParams . userId )
289
+ const userMeetingSettings = await getUserMeetingSettingsByUserId ( currentUser , reqParams . userId , false , true )
276
290
277
291
// error if no calendar found with the given id in request param
278
292
if (
0 commit comments