feat: submissions van een assignment geimplementeerd

This commit is contained in:
Adriaan Jacquet 2025-03-12 15:23:33 +01:00
parent 7c453467df
commit fd693dc55f
5 changed files with 58 additions and 4 deletions

View file

@ -1,6 +1,6 @@
import { Request, Response } from "express";
import { getSubmission } from "../services/submissions";
import { Language } from "../entities/content/language";
import { Language, languageMap } from "../entities/content/language";
interface SubmissionParams {
lohruid: string,
@ -12,9 +12,17 @@ export async function getSubmissionHandler(
res: Response,
): Promise<void> {
const lohruid = req.params.lohruid;
const submissionNumber = req.params.submissionNumber;
const submissionNumber = +req.params.submissionNumber;
const submission = getSubmission(lohruid, Language.Dutch, '1', submissionNumber);
if (isNaN(submissionNumber)) {
res.status(404).json({ error: 'Submission number is not a number' });
return;
}
let lang = languageMap[req.query.language as string] || Language.Dutch;
let version = req.query.version as string || '1';
const submission = getSubmission(lohruid, lang, version, submissionNumber);
if (!submission) {
res.status(404).json({ error: 'Submission not found' });

View file

@ -47,6 +47,14 @@ export class SubmissionRepository extends DwengoEntityRepository<Submission> {
);
}
public findAllSubmissionsForGroup(
group: Group,
): Promise<Submission[]> {
return this.find(
{ onBehalfOf: group },
);
}
public deleteSubmissionByLearningObjectAndSubmissionNumber(
loId: LearningObjectIdentifier,
submissionNumber: number

View file

@ -4,3 +4,10 @@ export enum Language {
English = 'en',
Germany = 'de',
}
export const languageMap: Record<string, Language> = {
nl: Language.Dutch,
fr: Language.French,
en: Language.English,
de: Language.Germany,
};

View file

@ -1,6 +1,6 @@
import express from 'express';
import { getSubmissionHandler } from '../controllers/submissions';
const router = express.Router();
const router = express.Router({ mergeParams: true });

View file

@ -1,12 +1,15 @@
import {
getAssignmentRepository,
getClassRepository,
getGroupRepository,
getSubmissionRepository,
} from '../data/repositories.js';
import {
AssignmentDTO,
mapToAssignmentDTO,
mapToAssignmentDTOId,
} from '../interfaces/assignment.js';
import { mapToSubmissionDTO, SubmissionDTO } from '../interfaces/submission.js';
export async function getAllAssignments(
classid: string,
@ -50,3 +53,31 @@ export async function getAssignment(
return mapToAssignmentDTO(assignment);
}
export async function getAssignmentsSubmissions(
classid: string,
assignmentNumber: number,
): Promise<SubmissionDTO[]> {
const classRepository = getClassRepository();
const cls = await classRepository.findById(classid);
if (!cls) {
return [];
}
const assignmentRepository = getAssignmentRepository();
const assignment = await assignmentRepository.findByClassAndId(cls, assignmentNumber);
if (!assignment) {
return [];
}
const groupRepository = getGroupRepository();
const groups = await groupRepository.findAllGroupsForAssignment(assignment);
const submissionRepository = getSubmissionRepository();
const submissions =
(await Promise.all(groups.map(group => submissionRepository.findAllSubmissionsForGroup(group)))).flat();
return submissions.map(mapToSubmissionDTO);
}