Files
var-monorepo/apps/hub-server/modules/event.ts
2025-07-25 09:53:58 -07:00

79 lines
1.7 KiB
TypeScript

import { Event, Participant, prisma, User } from "@repo/db";
import { addRolesToMember, removeRolesFromMember, setStandardName } from "modules/discord";
import { sendCourseCompletedEmail } from "modules/mail";
export const handleParticipantFinished = async (
event: Event,
participant: Participant,
user: User,
) => {
try {
const discordAccount = await prisma.discordAccount.findFirst({
where: {
userId: user.id,
},
});
const badgedToAdd = event.finishedBadges.filter((badge) => {
return !user.badges.includes(badge);
});
const permissionsToAdd = event.finishedPermissions.filter((permission) => {
return !user.permissions.includes(permission);
});
await prisma.user.update({
where: {
id: user.id,
},
data: {
badges: {
push: badgedToAdd,
},
permissions: {
push: permissionsToAdd,
},
},
});
if (discordAccount) {
await setStandardName({
memberId: discordAccount.discordId,
userId: user.id,
});
}
await sendCourseCompletedEmail(user.email, user, event);
await prisma.participant.update({
where: {
id: participant.id,
},
data: {
statusLog: {
push: {
event: "Berechtigungen und Badges vergeben",
timestamp: new Date(),
user: "system",
},
},
},
});
} catch (error) {
console.error("Error handling participant finished:", error);
}
};
export const handleParticipantEnrolled = async (
event: Event,
participant: Participant,
user: User,
) => {
const discordAccount = await prisma.discordAccount.findFirst({
where: {
userId: user.id,
},
});
if (event.discordRoleId && discordAccount) {
await addRolesToMember(discordAccount.discordId, [event.discordRoleId]);
}
};