diff --git a/src/common/nylas.js b/src/common/nylas.js index e5da3cc0..10890ff4 100644 --- a/src/common/nylas.js +++ b/src/common/nylas.js @@ -60,6 +60,15 @@ function nylasCalendarsSchema () { type: Sequelize.STRING(5), allowNull: false }, + email: { + field: 'email', + type: Sequelize.STRING, + validate: { + isEmail: { + msg: 'Please provide a valid email address' + } + } + }, id: { field: 'id', type: Sequelize.STRING(5), diff --git a/src/services/NylasService.js b/src/services/NylasService.js index a36381df..b13e5822 100644 --- a/src/services/NylasService.js +++ b/src/services/NylasService.js @@ -52,8 +52,9 @@ async function createVirtualCalendarForUser (userId, userEmail, userFullName, ti accountId: calendar.account_id, accessToken, accountProvider: provider, - isDeleted: false, - isPrimary: calendar.is_primary + email: userEmail, + isPrimary: calendar.is_primary, + isDeleted: false } } @@ -87,9 +88,9 @@ async function getAccessToken (code) { code }) - const { account_id: accountId, access_token: accessToken, provider } = res.data + const { account_id: accountId, access_token: accessToken, provider, email_address: email } = res.data - return { accountId, accessToken, provider } + return { accountId, accessToken, provider, email } } function getAvailableTimeFromSchedulingPage (page) { diff --git a/src/services/UserMeetingSettingsService.js b/src/services/UserMeetingSettingsService.js index a2842972..dc4f095c 100644 --- a/src/services/UserMeetingSettingsService.js +++ b/src/services/UserMeetingSettingsService.js @@ -49,11 +49,10 @@ async function ensureUserIsPermitted (currentUser, userMeetingSettingsUserId) { */ function stripUnwantedData (userMeetingSettings) { if (userMeetingSettings.nylasCalendars) { - const availableCalendars = _.filter(userMeetingSettings.nylasCalendars, (item) => { - if (!item.isDeleted) { - return _.omit(item, ['accessToken', 'accountId']) - } - }) + const availableCalendars = _.flatMap( + userMeetingSettings.nylasCalendars, + (item) => !item.isDeleted ? _.omit(item, ['accessToken', 'accountId', 'isDeleted']) : [] + ) userMeetingSettings.nylasCalendars = availableCalendars } @@ -205,7 +204,7 @@ async function handleConnectCalendarCallback (reqQuery) { try { // getting user's accessToken from Nylas using 'code' found in request query - const { accessToken, accountId, provider } = await NylasService.getAccessToken(reqQuery.code) + const { accessToken, accountId, provider, email } = await NylasService.getAccessToken(reqQuery.code) // view https://developer.nylas.com/docs/api/#post/oauth/token for error response schema if (!accessToken || !accountId) { throw new errors.BadRequestError('Error getting access token for the calendar.') @@ -223,10 +222,11 @@ async function handleConnectCalendarCallback (reqQuery) { } const calendarDetails = { - accessToken, + id: primaryCalendar.id, accountId, + accessToken, accountProvider: provider, - id: primaryCalendar.id, + email, isPrimary: true, isDeleted: false }