feat: submissions van een assignment geimplementeerd
This commit is contained in:
parent
7c453467df
commit
fd693dc55f
5 changed files with 58 additions and 4 deletions
|
@ -1,6 +1,6 @@
|
||||||
import { Request, Response } from "express";
|
import { Request, Response } from "express";
|
||||||
import { getSubmission } from "../services/submissions";
|
import { getSubmission } from "../services/submissions";
|
||||||
import { Language } from "../entities/content/language";
|
import { Language, languageMap } from "../entities/content/language";
|
||||||
|
|
||||||
interface SubmissionParams {
|
interface SubmissionParams {
|
||||||
lohruid: string,
|
lohruid: string,
|
||||||
|
@ -12,9 +12,17 @@ export async function getSubmissionHandler(
|
||||||
res: Response,
|
res: Response,
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
const lohruid = req.params.lohruid;
|
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) {
|
if (!submission) {
|
||||||
res.status(404).json({ error: 'Submission not found' });
|
res.status(404).json({ error: 'Submission not found' });
|
||||||
|
|
|
@ -47,6 +47,14 @@ export class SubmissionRepository extends DwengoEntityRepository<Submission> {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public findAllSubmissionsForGroup(
|
||||||
|
group: Group,
|
||||||
|
): Promise<Submission[]> {
|
||||||
|
return this.find(
|
||||||
|
{ onBehalfOf: group },
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
public deleteSubmissionByLearningObjectAndSubmissionNumber(
|
public deleteSubmissionByLearningObjectAndSubmissionNumber(
|
||||||
loId: LearningObjectIdentifier,
|
loId: LearningObjectIdentifier,
|
||||||
submissionNumber: number
|
submissionNumber: number
|
||||||
|
|
|
@ -4,3 +4,10 @@ export enum Language {
|
||||||
English = 'en',
|
English = 'en',
|
||||||
Germany = 'de',
|
Germany = 'de',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const languageMap: Record<string, Language> = {
|
||||||
|
nl: Language.Dutch,
|
||||||
|
fr: Language.French,
|
||||||
|
en: Language.English,
|
||||||
|
de: Language.Germany,
|
||||||
|
};
|
|
@ -1,6 +1,6 @@
|
||||||
import express from 'express';
|
import express from 'express';
|
||||||
import { getSubmissionHandler } from '../controllers/submissions';
|
import { getSubmissionHandler } from '../controllers/submissions';
|
||||||
const router = express.Router();
|
const router = express.Router({ mergeParams: true });
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,15 @@
|
||||||
import {
|
import {
|
||||||
getAssignmentRepository,
|
getAssignmentRepository,
|
||||||
getClassRepository,
|
getClassRepository,
|
||||||
|
getGroupRepository,
|
||||||
|
getSubmissionRepository,
|
||||||
} from '../data/repositories.js';
|
} from '../data/repositories.js';
|
||||||
import {
|
import {
|
||||||
AssignmentDTO,
|
AssignmentDTO,
|
||||||
mapToAssignmentDTO,
|
mapToAssignmentDTO,
|
||||||
mapToAssignmentDTOId,
|
mapToAssignmentDTOId,
|
||||||
} from '../interfaces/assignment.js';
|
} from '../interfaces/assignment.js';
|
||||||
|
import { mapToSubmissionDTO, SubmissionDTO } from '../interfaces/submission.js';
|
||||||
|
|
||||||
export async function getAllAssignments(
|
export async function getAllAssignments(
|
||||||
classid: string,
|
classid: string,
|
||||||
|
@ -50,3 +53,31 @@ export async function getAssignment(
|
||||||
|
|
||||||
return mapToAssignmentDTO(assignment);
|
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);
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue