Skip to content

Commit 5c7e61e

Browse files
author
Md Mahidul Haque Alvi
authored
Merge pull request #1 from mahidulalvi-bonic/feature/interview-nylas
Merge branch feature/interview-nylas into feature/interview-update.
2 parents c120501 + 2308de6 commit 5c7e61e

File tree

2 files changed

+22
-9
lines changed

2 files changed

+22
-9
lines changed

src/services/NylasService.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ async function patchSchedulingPage (pageId, accessToken, changes) {
167167
* @param {Array<Object>} calendars list of Nylas calendars
168168
* @returns
169169
*/
170-
function getPrimaryCalendar (calendars) {
170+
async function getPrimaryCalendar (calendars) {
171171
const primaryCalendar = _.find(calendars, { is_primary: true, read_only: false })
172172

173173
if (primaryCalendar) {

src/services/UserMeetingSettingsService.js

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,20 @@ function stripUnwantedData (userMeetingSettings) {
4848
return userMeetingSettings
4949
}
5050

51+
function handleUserMeetingSettingsData (data, shouldNotStripUnwantedData) {
52+
return shouldNotStripUnwantedData ? data : stripUnwantedData(data)
53+
}
54+
5155
/**
5256
* Get UserMeetingsettings by userid
5357
* @param {Object} currentUser the user who perform this operation.
5458
* @param {String} userId the user id
5559
* @param {Boolean} fromDb flag if query db for data or not
60+
* @param {object} options { shouldNotStripUnwantedData: false }
61+
* shouldNotStripUnwantedData - flag indicating if unwanted data should be stripped or not
5662
* @returns {Object} the userMeetingSetting object
5763
*/
58-
async function getUserMeetingSettingsByUserId (currentUser, userId, fromDb) {
64+
async function getUserMeetingSettingsByUserId (currentUser, userId, fromDb, options = { shouldNotStripUnwantedData: false }) {
5965
// check permission
6066
await ensureUserIsPermitted(currentUser, userId)
6167
if (!fromDb) {
@@ -68,7 +74,7 @@ async function getUserMeetingSettingsByUserId (currentUser, userId, fromDb) {
6874
// extract interviews from ES object
6975
const userMeetingSettings = _.get(userMeetingSettingsES, 'body._source', [])
7076
if (userMeetingSettings) {
71-
return stripUnwantedData(userMeetingSettings)
77+
return handleUserMeetingSettingsData(userMeetingSettings, options.shouldNotStripUnwantedData)
7278
}
7379
throw new errors.NotFoundError(`The userMeetingSettings for userId=${userId} not found.`)
7480
} catch (err) {
@@ -79,6 +85,7 @@ async function getUserMeetingSettingsByUserId (currentUser, userId, fromDb) {
7985
throw err
8086
}
8187
}
88+
8289
// either ES query failed or `fromDb` is set - fallback to DB
8390
logger.info({ component: 'InterviewService', context: 'getUserMeetingSettingsByUserId', message: 'try to query db for data' })
8491

@@ -88,12 +95,15 @@ async function getUserMeetingSettingsByUserId (currentUser, userId, fromDb) {
8895
throw new errors.NotFoundError(`The userMeetingSettings for userId=${userId} not found.`)
8996
}
9097

91-
return stripUnwantedData(userMeetingSettings.dataValues)
98+
return handleUserMeetingSettingsData(userMeetingSettings, options.shouldNotStripUnwantedData)
9299
}
93100
getUserMeetingSettingsByUserId.schema = Joi.object().keys({
94101
currentUser: Joi.object().required(),
95102
userId: Joi.string().uuid().required(),
96-
fromDb: Joi.boolean()
103+
fromDb: Joi.boolean(),
104+
options: Joi.object().keys({
105+
shouldNotStripUnwantedData: Joi.boolean()
106+
})
97107
}).required()
98108

99109
// TODO document
@@ -102,6 +112,7 @@ async function createUserMeetingSettingsIfNotExisting (currentUser, userId, cale
102112
await ensureUserIsPermitted(currentUser, userId)
103113

104114
let userMeetingSettings = await UserMeetingSettings.findById(userId, false)
115+
105116
const payload = {
106117
id: userId,
107118
defaultAvailableTime: await NylasService.getAvailableTimeFromSchedulingPage(schedulingPage),
@@ -115,6 +126,7 @@ async function createUserMeetingSettingsIfNotExisting (currentUser, userId, cale
115126
isPrimary: calendar.is_primary
116127
})
117128
}
129+
118130
if (_.isNil(userMeetingSettings)) {
119131
userMeetingSettings = await UserMeetingSettings.create(payload, { transaction: transaction })
120132
await processCreate(userMeetingSettings.toJSON())
@@ -179,20 +191,18 @@ async function handleConnectCalendarCallback (reqQuery) {
179191
try {
180192
// getting user's accessToken from Nylas using 'code' found in request query
181193
const { accessToken, accountId, provider } = await NylasService.getAccessToken(reqQuery.code)
182-
183194
// view https://developer.nylas.com/docs/api/#post/oauth/token for error response schema
184195
if (!accessToken || !accountId) {
185196
throw new errors.BadRequestError('Error during getting access token for the calendar.')
186197
}
187198

188199
// getting user's all existing calendars
189200
const calendars = await NylasService.getExistingCalendars(accessToken)
190-
191201
if (!Array.isArray(calendars) || calendars.length < 1) {
192202
throw new errors.BadRequestError('Error getting calendar data for the user.')
193203
}
194204

195-
const primaryCalendar = NylasService.getPrimaryCalendar(calendars)
205+
const primaryCalendar = await NylasService.getPrimaryCalendar(calendars)
196206
if (!primaryCalendar) {
197207
throw new errors.NotFoundError('Could not find any writable calendar.')
198208
}
@@ -215,6 +225,9 @@ async function handleConnectCalendarCallback (reqQuery) {
215225

216226
// reuse this method to create UserMeetingSettings object
217227
if (_.isNil(userMeetingSettings)) {
228+
// method 'createUserMeetingSettingsIfNotExisting' expects keys in Nylas backend
229+
// API format, so extend calendarDetails object with 'is_primary' key
230+
_.extend(calendarDetails, { is_primary: calendarDetails.isPrimary })
218231
userMeetingSettings = await createUserMeetingSettingsIfNotExisting(
219232
currentUser,
220233
userId,
@@ -272,7 +285,7 @@ async function deleteUserCalendar (currentUser, reqParams) {
272285
await ensureUserIsPermitted(currentUser, reqParams.userId)
273286

274287
try {
275-
const userMeetingSettings = await getUserMeetingSettingsByUserId(currentUser, reqParams.userId)
288+
const userMeetingSettings = await getUserMeetingSettingsByUserId(currentUser, reqParams.userId, false, { shouldNotStripUnwantedData: true })
276289

277290
// error if no calendar found with the given id in request param
278291
if (

0 commit comments

Comments
 (0)