added chron to hub server, removed starterEvent

This commit is contained in:
PxlLoewe
2025-02-28 07:21:07 +01:00
parent bbcde2eb4a
commit a477b65c2f
20 changed files with 584 additions and 281 deletions

View File

@@ -1,6 +1,7 @@
import { getMoodleCourseCompletionStatus, getMoodleUserById } from "./moodle";
import { CronJob } from "cron";
import { prisma } from "@repo/db";
import { participantCompleted } from "helper/event";
const syncMoodleIds = async () => {
try {
@@ -30,71 +31,84 @@ const syncMoodleIds = async () => {
}
};
const updateParticipantMoodleResults =
(usage: "starter" | "finisher") => async () => {
const participantsMoodlePending = await prisma.participant.findMany({
where: {
[usage === "starter"
? "starterMoodleCourseCompleted"
: "finisherMoodleCourseCompleted"]: false,
Event: {
[usage === "starter"
? "starterMoodleCourseId"
: "finisherMoodleCourseId"]: {
not: null,
},
const updateParticipantMoodleResults = async () => {
const participantsMoodlePending = await prisma.participant.findMany({
where: {
finisherMoodleCurseCompleted: false,
Event: {
finisherMoodleCourseId: {
not: null,
},
},
select: {
id: true,
Event: true,
User: true,
},
});
},
include: {
Event: true,
User: true,
},
});
await Promise.all(
participantsMoodlePending.map(async (p) => {
if (!p.User) return;
if (!p.User.moodleId) return;
await Promise.all(
participantsMoodlePending.map(async (p) => {
if (!p.User) return;
if (!p.User.moodleId) return;
const quizzResult = await getMoodleCourseCompletionStatus(
p.User.moodleId.toString(),
p.Event.finisherMoodleCourseId!,
);
const quizzResult = await getMoodleCourseCompletionStatus(
p.User.moodleId.toString(),
p.Event[
usage === "starter"
? "starterMoodleCourseId"
: "finisherMoodleCourseId"
]!,
);
p.Event.finisherMoodleCourseId;
if (quizzResult?.completionstatus?.completed === true) {
if (quizzResult?.completionstatus?.completed === true) {
await prisma.participant.update({
where: {
id: p.id,
},
data: {
finisherMoodleCurseCompleted: true,
statusLog: {
push: {
event: "Finisher course completed",
timestamp: new Date(),
user: "system",
},
},
},
});
if (participantCompleted(p.Event, p)) {
// Event is completed, give relating permissions
await prisma.user.update({
where: {
id: p.userId,
},
data: {
permissions: {
push: p.Event.finishedPermissions,
},
badges: {
push: p.Event.finishedBadges,
},
},
});
await prisma.participant.update({
where: {
id: p.id,
},
data: {
[usage === "starter"
? "starterMoodleCurseCompleted"
: "finisherMoodleCurseCompleted"]: true,
statusLog: {
push: {
event: "Starter course completed",
timestamp: new Date(),
user: "system",
},
},
finished: true,
},
});
}
}),
);
};
}
}),
);
};
CronJob.from({ cronTime: "0 * * * *", onTick: syncMoodleIds, start: true });
CronJob.from({
cronTime: "*/5 * * * *",
onTick: async () => {
await updateParticipantMoodleResults("starter");
await updateParticipantMoodleResults("finisher");
console.log("Updating participant moodle results");
await updateParticipantMoodleResults();
},
start: true,
});
updateParticipantMoodleResults();

View File

@@ -2,7 +2,7 @@ import axios from "axios";
export const getMoodleUserById = async (id: string) => {
const { data: user } = await axios.get(
"https://moodle.virtualairrescue.com/webservice/rest/server.php",
`${process.env.MOODLE_URL}/webservice/rest/server.php`,
{
params: {
wstoken: process.env.MOODLE_TOKEN,
@@ -31,7 +31,7 @@ export const getMoodleUserById = async (id: string) => {
export const getMoodleQuizResult = async (userId: string, quizId: string) => {
const { data: quizzes } = await axios.get(
"https://moodle.virtualairrescue.com/webservice/rest/server.php",
`${process.env.MOODLE_URL}/webservice/rest/server.php`,
{
params: {
wstoken: process.env.MOODLE_TOKEN,
@@ -50,7 +50,7 @@ export const getMoodleCourseCompletionStatus = async (
courseId: string,
) => {
const { data: completionStatus } = await axios.get(
"https://moodle.virtualairrescue.com/webservice/rest/server.php",
`${process.env.MOODLE_URL}/webservice/rest/server.php`,
{
params: {
wstoken: process.env.MOODLE_TOKEN,
@@ -61,29 +61,11 @@ export const getMoodleCourseCompletionStatus = async (
},
},
);
return completionStatus;
};
export const enrollUserInCourse = async (
courseid: number | string,
userid: number | string,
) => {
const { data: enrollmentResponse } = await axios.get(
"https://moodle.virtualairrescue.com/webservice/rest/server.php",
{
params: {
wstoken: process.env.MOODLE_TOKEN,
wsfunction: "enrol_manual_enrol_users",
moodlewsrestformat: "json",
enrolments: [
{
roleid: 5,
userid,
courseid,
},
],
},
},
);
return enrollmentResponse;
return completionStatus as {
completionstatus: {
completed: true;
aggregation: number;
};
warnings: [];
};
};