removed event-chronjobs, used Events in hub-app insteand, added admin Btn to set Discord-User and run Event-completed-workflow. Fixed Bug of wrong participants-count in Event-Modal
This commit is contained in:
@@ -1,11 +1,7 @@
|
||||
import { getMoodleCourseCompletionStatus, getMoodleUserById } from "./moodle";
|
||||
import { CronJob } from "cron";
|
||||
import { DISCORD_ROLES, ParticipantLog, prisma } from "@repo/db";
|
||||
import { sendCourseCompletedEmail } from "modules/mail";
|
||||
import { prisma } from "@repo/db";
|
||||
import { handleParticipantFinished } from "modules/event";
|
||||
import { eventCompleted } from "helper/events";
|
||||
import { addRolesToMember, removeRolesFromMember } from "modules/discord";
|
||||
import { JsonValueType } from "@repo/db/zod";
|
||||
|
||||
const syncMoodleIds = async () => {
|
||||
try {
|
||||
@@ -61,6 +57,8 @@ const updateParticipantMoodleResults = async () => {
|
||||
);
|
||||
|
||||
if (quizzResult?.completionstatus?.completed === true) {
|
||||
await handleParticipantFinished(p.Event, p, p.User);
|
||||
|
||||
return prisma.participant.update({
|
||||
where: {
|
||||
id: p.id,
|
||||
@@ -81,127 +79,11 @@ const updateParticipantMoodleResults = async () => {
|
||||
);
|
||||
};
|
||||
|
||||
export const checkFinishedParticipants = async () => {
|
||||
const participantsPending = await prisma.participant.findMany({
|
||||
where: {
|
||||
completetionWorkflowFinished: false,
|
||||
},
|
||||
include: {
|
||||
Event: true,
|
||||
User: true,
|
||||
},
|
||||
});
|
||||
participantsPending.forEach(async (p) => {
|
||||
if (!p.User) return;
|
||||
const completed = eventCompleted(p.Event, p);
|
||||
|
||||
if (!completed) return;
|
||||
console.log(
|
||||
`User ${p.User.firstname} ${p.User.lastname} - ${p.User.publicId} finished event ${p.Event.name}`,
|
||||
);
|
||||
handleParticipantFinished(p.Event, p, p.User);
|
||||
});
|
||||
};
|
||||
|
||||
const checkUnfinishedParticipants = async () => {
|
||||
const participantsPending = await prisma.participant.findMany({
|
||||
where: {
|
||||
completetionWorkflowFinished: false,
|
||||
},
|
||||
include: {
|
||||
Event: true,
|
||||
User: {
|
||||
include: {
|
||||
discordAccounts: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
participantsPending.forEach(async (p) => {
|
||||
if (!p.User) return;
|
||||
const completed = eventCompleted(p.Event, p);
|
||||
|
||||
if (completed) return;
|
||||
|
||||
if (!p.Event.discordRoleId) {
|
||||
await prisma.participant.update({
|
||||
where: {
|
||||
id: p.id,
|
||||
},
|
||||
data: {
|
||||
inscriptionWorkflowCompleted: true,
|
||||
},
|
||||
});
|
||||
return;
|
||||
}
|
||||
console.log(
|
||||
`User ${p.User.firstname} ${p.User.lastname} - ${p.User.publicId} did not finish event ${p.Event.name}`,
|
||||
);
|
||||
if (p.User.discordAccounts[0] && p.Event.discordRoleId) {
|
||||
await addRolesToMember(p.User.discordAccounts[0].discordId, [p.Event.discordRoleId]);
|
||||
await prisma.participant.update({
|
||||
where: {
|
||||
id: p.id,
|
||||
},
|
||||
data: {
|
||||
inscriptionWorkflowCompleted: true,
|
||||
statusLog: {
|
||||
push: {
|
||||
event: "Discord-Rolle hinzugefügt",
|
||||
timestamp: new Date(),
|
||||
user: "system",
|
||||
} as ParticipantLog as any,
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
const checkDiscordRoles = async () => {
|
||||
const user = await prisma.user.findMany({
|
||||
where: {
|
||||
discordAccounts: {
|
||||
some: {},
|
||||
},
|
||||
},
|
||||
include: {
|
||||
discordAccounts: true,
|
||||
},
|
||||
});
|
||||
|
||||
for (const u of user) {
|
||||
// Here ony member Roles regarding their rights are checked
|
||||
if (!u.discordAccounts[0]) continue;
|
||||
const discordAccount = u.discordAccounts[0];
|
||||
|
||||
// For Pilot
|
||||
if (u.permissions.includes("PILOT")) {
|
||||
await addRolesToMember(discordAccount.discordId, [DISCORD_ROLES.PILOT]); // ONLINE_PILOT
|
||||
} else {
|
||||
await removeRolesFromMember(discordAccount.discordId, [DISCORD_ROLES.PILOT]); // ONLINE_PILOT
|
||||
}
|
||||
// for Dispatcher
|
||||
if (u.permissions.includes("DISPO")) {
|
||||
await addRolesToMember(discordAccount.discordId, [DISCORD_ROLES.DISPATCHER]); // ONLINE_DISPATCHER
|
||||
} else {
|
||||
await removeRolesFromMember(discordAccount.discordId, [DISCORD_ROLES.DISPATCHER]); // ONLINE_DISPATCHER
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
CronJob.from({ cronTime: "0 * * * *", onTick: syncMoodleIds, start: true });
|
||||
CronJob.from({
|
||||
cronTime: "*/1 * * * *",
|
||||
onTick: async () => {
|
||||
await updateParticipantMoodleResults();
|
||||
await checkFinishedParticipants();
|
||||
await checkUnfinishedParticipants();
|
||||
},
|
||||
start: true,
|
||||
});
|
||||
CronJob.from({
|
||||
cronTime: "0 * * * *",
|
||||
onTick: checkDiscordRoles,
|
||||
start: true,
|
||||
});
|
||||
|
||||
@@ -36,3 +36,19 @@ export const removeRolesFromMember = async (memberId: string, roleIds: string[])
|
||||
console.error("Error removing roles from member:", error);
|
||||
});
|
||||
};
|
||||
export const setStandardName = async ({
|
||||
memberId,
|
||||
userId,
|
||||
}: {
|
||||
memberId: string;
|
||||
userId: string;
|
||||
}) => {
|
||||
discordAxiosClient
|
||||
.post("/helper/set-standard-name", {
|
||||
memberId,
|
||||
userId,
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error("Error removing roles from member:", error);
|
||||
});
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Event, Participant, prisma, User } from "@repo/db";
|
||||
import { removeRolesFromMember } from "modules/discord";
|
||||
import { addRolesToMember, removeRolesFromMember, setStandardName } from "modules/discord";
|
||||
import { sendCourseCompletedEmail } from "modules/mail";
|
||||
|
||||
export const handleParticipantFinished = async (
|
||||
@@ -35,7 +35,10 @@ export const handleParticipantFinished = async (
|
||||
});
|
||||
|
||||
if (event.discordRoleId && discordAccount) {
|
||||
await removeRolesFromMember(discordAccount.discordId, [event.discordRoleId]);
|
||||
await setStandardName({
|
||||
memberId: discordAccount.discordId,
|
||||
userId: user.id,
|
||||
});
|
||||
}
|
||||
await sendCourseCompletedEmail(user.email, user, event);
|
||||
|
||||
@@ -55,3 +58,18 @@ export const handleParticipantFinished = async (
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
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]);
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user