Skip to content
This repository has been archived by the owner on Jun 9, 2023. It is now read-only.

chore: check integrationStatus before trying to use calendar #2354

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions server/src/controllers/ChapterUser/resolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import { updateWaitlistForUserRemoval } from '../../util/waitlist';
import { removeEventAttendee } from '../../services/Google';
import { redactSecrets } from '../../util/redact-secrets';
import mailerService from '../../../src/services/MailerService';
import { integrationStatus } from '../../util/calendar';
import { chapterUserRoleChange } from '../../email-templates';

const chapterUsersInclude = {
Expand Down Expand Up @@ -92,6 +93,9 @@ async function removeUserFromEventsInChapter({
);
return;
}
const calendarStatus = await integrationStatus();
if (!calendarStatus) return;

const calendarUpdates = eventsWithCalendars.map(
async ({ calendar_event_id, chapter: { calendar_id } }) => {
if (calendar_event_id && calendar_id) {
Expand Down
36 changes: 26 additions & 10 deletions server/src/controllers/Events/resolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,10 @@ import {
isAdminFromInstanceRole,
isChapterAdminWhere,
} from '../../util/adminedChapters';
import { createCalendarEventHelper } from '../../util/calendar';
import {
createCalendarEventHelper,
integrationStatus,
} from '../../util/calendar';
import { updateWaitlistForUserRemoval } from '../../util/waitlist';
import { redactSecrets } from '../../util/redact-secrets';
import {
Expand Down Expand Up @@ -414,7 +417,7 @@ export class EventResolver {

const calendarEventId = event.calendar_event_id;
const calendarId = event.chapter.calendar_id;
if (calendarId && calendarEventId) {
if (calendarId && calendarEventId && (await integrationStatus())) {
try {
await addEventAttendee(
{ calendarId, calendarEventId },
Expand Down Expand Up @@ -498,7 +501,7 @@ export class EventResolver {
const calendarId = event.chapter.calendar_id;
const calendarEventId = event.calendar_event_id;

if (calendarId && calendarEventId) {
if (calendarId && calendarEventId && (await integrationStatus())) {
try {
await cancelEventAttendance(
{ calendarId, calendarEventId },
Expand Down Expand Up @@ -541,7 +544,7 @@ export class EventResolver {
const calendarId = updatedUser.event.chapter.calendar_id;
const calendarEventId = updatedUser.event.calendar_event_id;

if (calendarId && calendarEventId) {
if (calendarId && calendarEventId && (await integrationStatus())) {
try {
await addEventAttendee(
{ calendarId, calendarEventId },
Expand Down Expand Up @@ -579,7 +582,7 @@ export class EventResolver {
const calendarId = event.chapter.calendar_id;
const calendarEventId = event.calendar_event_id;

if (calendarId && calendarEventId) {
if (calendarId && calendarEventId && (await integrationStatus())) {
try {
await removeEventAttendee(
{ calendarId, calendarEventId },
Expand Down Expand Up @@ -655,7 +658,7 @@ export class EventResolver {
});

// TODO: handle the case where the calendar_id doesn't exist. Warn the user?
if (chapter.calendar_id) {
if (chapter.calendar_id && (await integrationStatus())) {
await createCalendarEventHelper({
attendeeEmails: attendEvent ? [ctx.user.email] : [],
calendarId: chapter.calendar_id,
Expand All @@ -673,7 +676,8 @@ export class EventResolver {
where: { id },
include: { chapter: true, event_users: { include: { user: true } } },
});
if (event.calendar_event_id) return event;
const calendarStatus = await integrationStatus();
if (event.calendar_event_id || !calendarStatus) return event;
if (!event.chapter.calendar_id) {
throw Error(
'Calendar events cannot be created when chapter does not have a Google calendar',
Expand Down Expand Up @@ -748,7 +752,11 @@ export class EventResolver {
}

// TODO: warn the user if the any calendar ids are missing
if (updatedEvent.chapter.calendar_id && updatedEvent.calendar_event_id) {
if (
updatedEvent.chapter.calendar_id &&
updatedEvent.calendar_event_id &&
(await integrationStatus())
) {
const createMeet =
isOnline(updatedEvent.venue_type) && !isOnline(event.venue_type);
const removeMeet =
Expand Down Expand Up @@ -814,7 +822,11 @@ export class EventResolver {
});
}
}
if (event.chapter.calendar_id && event.calendar_event_id) {
if (
event.chapter.calendar_id &&
event.calendar_event_id &&
(await integrationStatus())
) {
try {
// TODO: consider not awaiting. Ideally the user would see the app
// respond immediately, but be informed of any failures later.
Expand Down Expand Up @@ -843,7 +855,11 @@ export class EventResolver {
},
});

if (event.chapter.calendar_id && event.calendar_event_id) {
if (
event.chapter.calendar_id &&
event.calendar_event_id &&
(await integrationStatus())
) {
try {
// TODO: consider not awaiting. Ideally the user would see the app
// respond immediately, but be informed of any failures later.
Expand Down