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,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user