From 49e646c9edf0fc46b205bebc94cf0587de326a1c Mon Sep 17 00:00:00 2001 From: Md Mahidul Haque Alvi Date: Thu, 28 Oct 2021 19:59:07 -0500 Subject: [PATCH] Added new field 'email' in NylasCalendars column in UserMeetingSettings record. In NylasService, creating a virtual calendar returns the result, but extends it with new email field - populated with current user's email. The method 'getAccessToken' is also modified to include the server sent email field in the parsed result. And in UserMeetingSettingsService, method 'stripUnwantedData' was accidentally not stripping the data correctly, but its fixed now. Also, the method 'handleConnectCalendarCallback' has been updated to include the email field when creating/updating calendars in UserMeetingSettings record. --- src/common/nylas.js | 9 +++++++++ src/services/NylasService.js | 9 +++++---- src/services/UserMeetingSettingsService.js | 16 ++++++++-------- 3 files changed, 22 insertions(+), 12 deletions(-) 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 }