79 lines
1.7 KiB
TypeScript
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]);
|
|
}
|
|
};
|