added chron to hub server, removed starterEvent
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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: [];
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user