feat: getallsubmissions endpoint toegevoegd

This commit is contained in:
Adriaan Jacquet 2025-03-29 21:10:57 +01:00
parent c9739a1420
commit f0eb4822d9
4 changed files with 36 additions and 20 deletions

View file

@ -1,14 +1,9 @@
import { Request, Response } from 'express';
import { createSubmission, deleteSubmission, getSubmission } from '../services/submissions.js';
import { createSubmission, deleteSubmission, getAllSubmissions, getSubmission } from '../services/submissions.js';
import { Language, languageMap } from '../entities/content/language.js';
import { SubmissionDTO } from '../interfaces/submission';
interface SubmissionParams {
hruid: string;
id: number;
}
export async function getSubmissionHandler(req: Request<SubmissionParams>, res: Response): Promise<void> {
export async function getSubmissionHandler(req: Request, res: Response): Promise<void> {
const lohruid = req.params.hruid;
const submissionNumber = +req.params.id;
@ -17,6 +12,7 @@ export async function getSubmissionHandler(req: Request<SubmissionParams>, res:
return;
}
const lang = languageMap[req.query.language as string] || Language.Dutch;
const version = (req.query.version || 1) as number;
@ -30,6 +26,17 @@ export async function getSubmissionHandler(req: Request<SubmissionParams>, res:
res.json(submission);
}
export async function getAllSubmissionsHandler(req: Request, res: Response): Promise<void> {
const lohruid = req.params.hruid;
const lang = languageMap[req.query.language as string] || Language.Dutch;
const version = (req.query.version || 1) as number;
const submissions = await getAllSubmissions(lohruid, lang, version);
res.json({ submissions: submissions });
}
export async function createSubmissionHandler(req: Request, res: Response) {
const submissionDTO = req.body as SubmissionDTO;

View file

@ -14,6 +14,14 @@ export class SubmissionRepository extends DwengoEntityRepository<Submission> {
});
}
public findSubmissionsByLearningObject(loId: LearningObjectIdentifier): Promise<Submission[]> {
return this.find({
learningObjectHruid: loId.hruid,
learningObjectLanguage: loId.language,
learningObjectVersion: loId.version,
})
}
public findMostRecentSubmissionForStudent(loId: LearningObjectIdentifier, submitter: Student): Promise<Submission | null> {
return this.findOne(
{

View file

@ -21,6 +21,19 @@ export async function getSubmission(
return mapToSubmissionDTO(submission);
}
export async function getAllSubmissions(
lohruid: string,
language: Language,
version: number,
): Promise<SubmissionDTO[]> {
const loId = new LearningObjectIdentifier(lohruid, language, version);
const submissionRepository = getSubmissionRepository();
const submissions = await submissionRepository.findSubmissionsByLearningObject(loId);
return submissions.map(mapToSubmissionDTO);
}
export async function createSubmission(submissionDTO: SubmissionDTO) {
const submissionRepository = getSubmissionRepository();
const submission = mapToSubmission(submissionDTO);

View file

@ -2,6 +2,7 @@ import { setupTestApp } from '../setup-tests.js';
import { describe, it, expect, beforeAll, beforeEach, vi, Mock } from 'vitest';
import { Request, Response } from 'express';
import { getAssignmentHandler, getAllAssignmentsHandler, getAssignmentsSubmissionsHandler } from '../../src/controllers/assignments.js';
import { checkReturn404, checkReturnList } from './qol.js'
function createRequestObject(classid: string, assignmentid: string) {
return {
@ -13,19 +14,6 @@ function createRequestObject(classid: string, assignmentid: string) {
};
}
function checkReturnList(jsonMock: Mock, listName: string) {
expect(jsonMock).toHaveBeenCalled();
const result = jsonMock.mock.lastCall![0];
expect(listName in result).toBeTruthy();
}
function checkReturn404(jsonMock: Mock, statusMock: Mock) {
expect(statusMock).toHaveBeenCalledWith(404);
expect(jsonMock).toHaveBeenCalled();
}
describe('Assignment controllers', () => {
let req: Partial<Request>;
let res: Partial<Response>;