Skip to content
This repository has been archived by the owner on Aug 6, 2024. It is now read-only.

backend mutation #762

Merged
merged 3 commits into from
Jan 1, 2024
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
22 changes: 22 additions & 0 deletions src/emailTemplates/adminDeleteMeeting.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<!DOCTYPE html>
<html lang="en">
<body>
<p>
This email is to let you know that a meeting has been removed by
administration. Please contact
<a href="mailto:[email protected]">[email protected]</a> for
further details.
</p>
<p>The original meeting details are below.</p>
<p>Title: {{ meeting.title }}</p>
<p>Start Date: {{ formattedStart }}</p>
<p>End Date: {{ formattedEnd }}</p>

{{ renderedDescription | safe }}

<p>
You are receiving this message because you are a member of {{
org.name }}.
</p>
</body>
</html>
95 changes: 95 additions & 0 deletions src/graphql/resolvers/Mutation/adminDeleteMeeting.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
import { ApolloError } from 'apollo-server-errors';
import { deleteCalendarEvent } from '../../../googleApis/calendar';
import sendEmail from '../../../utils/sendEmail';
import { Op } from 'sequelize';
import moment from 'moment-timezone';

export default async (
root,
{ meetingId },
{
adminRoleRequired,
models: {
meetings,
googleCalendarEvents,
googleCalendars,
memberships,
organizations,
users
}
}
) => {
const meeting = await meetings.idLoader.load(meetingId);

if (!meeting) {
throw new ApolloError(
"There's no meeting with that id",
'MEETING_NOT_FOUND'
);
}

adminRoleRequired('charters');

const org = await organizations.idLoader.load(meeting.organizationId);

let where = {};
let include = {
model: memberships,
where: {
organizationId: org.id,
updateNotification: {
[Op.not]: false
}
},
required: true
};

const formattedStart = moment(meeting.start)
.tz('America/New_York')
.format('dddd, MMMM Do YYYY, h:mm a');

const formattedEnd = moment(meeting.end)
.tz('America/New_York')
.format('dddd, MMMM Do YYYY, h:mm a');

let members = await users.findAll({
where,
include
});

await Promise.all(
members.map(async member => {
await sendEmail({
to: member.email,
subject: `${org.name}'s meeting has been cancelled | StuyActivities`,
template: 'adminDeleteMeeting.html',
variables: {
member,
org,
meeting,
formattedStart,
formattedEnd,
renderedDescription: meeting.description
}
});
})
);

const meetingCalEvent = await googleCalendarEvents.findOne({
where: {
meetingId: meetingId,
recurringMeeting: false
}
});

const gCal = await googleCalendars.orgIdLoader.load(meeting.organizationId);

if (meetingCalEvent) {
await deleteCalendarEvent(gCal.gCalId, meetingCalEvent.gCalEventId);
await meetingCalEvent.destroy();
}

await meeting.destroy();

return true;
};
2 changes: 2 additions & 0 deletions src/graphql/resolvers/Mutation/index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import addRoomToMeeting from './addRoomToMeeting';
import adminDeleteMeeting from './adminDeleteMeeting';
import alterCharter from './alterCharter';
import alterClubFairResponse from './alterClubFairResponse';
import alterEmailSettings from './alterEmailSettings';
Expand Down Expand Up @@ -51,6 +52,7 @@ import createUser from './createUser';
export default {
linkOAuthPlatform,
login,
adminDeleteMeeting,
alterCharter,
alterClubFairResponse,
alterEmailSettings,
Expand Down
3 changes: 2 additions & 1 deletion src/graphql/schema/Mutation.js
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,8 @@ export default gql`
createPromotedClub(orgId: Int!, blurb: String!): PromotedClub
deletePromotedClub(promotedClubId: Int!): Boolean

# --- settings ---
# --- admin ---
adminDeleteMeeting(meetingId: Int!): Boolean
alterSettings(membershipRequirement: Int!): Settings

# --- users ---
Expand Down
Loading