diff --git a/apps/hub-server/routes/event.ts b/apps/hub-server/routes/event.ts index 36e37466..53018cf3 100644 --- a/apps/hub-server/routes/event.ts +++ b/apps/hub-server/routes/event.ts @@ -2,6 +2,7 @@ import { prisma } from "@repo/db"; import { Router } from "express"; import { eventCompleted } from "helper/events"; import { handleParticipantEnrolled, handleParticipantFinished } from "modules/event"; +import { getMoodleCourseCompletionStatus } from "modules/moodle"; const router: Router = Router(); @@ -38,6 +39,43 @@ router.post("/handle-participant-finished", async (req, res) => { res.status(200).json({ message: "Participant finished successfully" }); }); +router.post("/check-moodle-results", async (req, res) => { + const { participantId } = req.body; + if (!participantId) { + res.status(400).json({ error: "Participant ID is required" }); + return; + } + const participant = await prisma.participant.findUnique({ + where: { + id: typeof participantId == "string" ? parseInt(participantId) : participantId, + }, + include: { + Event: true, + User: true, + }, + }); + if (!participant) { + res.status(404).json({ error: "Teilnehmer nicht gefunden" }); + return; + } + if (!participant.User || !participant.User.moodleId) { + res.status(400).json({ error: "Teilnehmer hat keine Moodle-ID" }); + return; + } + const quizzResult = await getMoodleCourseCompletionStatus( + participant.User.moodleId.toString(), + participant.Event.finisherMoodleCourseId!, + ); + if (quizzResult?.completionstatus?.completed === true) { + await handleParticipantFinished(participant.Event, participant, participant.User); + res + .status(200) + .json({ message: "Nutzer hat das Moodle-event abgeschlossen, workflow ausgeführt" }); + } else { + res.status(200).json({ message: "Nutzer hat das Moodle-event noch nicht abgeschlossen" }); + } +}); + router.post("/handle-participant-enrolled", async (req, res) => { const { participantId } = req.body; if (!participantId) { diff --git a/apps/hub/app/(app)/admin/event/_components/ParticipantModal.tsx b/apps/hub/app/(app)/admin/event/_components/ParticipantModal.tsx index c548b618..e3c4d1be 100644 --- a/apps/hub/app/(app)/admin/event/_components/ParticipantModal.tsx +++ b/apps/hub/app/(app)/admin/event/_components/ParticipantModal.tsx @@ -5,7 +5,7 @@ import { UseFormReturn } from "react-hook-form"; import { upsertParticipant } from "../../../events/actions"; import { RefObject } from "react"; import { deleteParticipant } from "../action"; -import { handleParticipantFinished } from "../../../../../helper/events"; +import { checkMoodleResults, handleParticipantFinished } from "../../../../../helper/events"; import { AxiosError } from "axios"; import toast from "react-hot-toast"; @@ -22,6 +22,7 @@ export const ParticipantModal = ({ participantForm, ref }: ParticipantModalProps