From f0eb4822d928b8ab1f140d1c63977045193b9c19 Mon Sep 17 00:00:00 2001 From: Adriaan Jacquet Date: Sat, 29 Mar 2025 21:10:57 +0100 Subject: [PATCH] feat: getallsubmissions endpoint toegevoegd --- backend/src/controllers/submissions.ts | 21 ++++++++++++------- .../data/assignments/submission-repository.ts | 8 +++++++ backend/src/services/submissions.ts | 13 ++++++++++++ backend/tests/controllers/assignments.test.ts | 14 +------------ 4 files changed, 36 insertions(+), 20 deletions(-) diff --git a/backend/src/controllers/submissions.ts b/backend/src/controllers/submissions.ts index 1e66dbe9..ee5841d2 100644 --- a/backend/src/controllers/submissions.ts +++ b/backend/src/controllers/submissions.ts @@ -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, res: Response): Promise { +export async function getSubmissionHandler(req: Request, res: Response): Promise { const lohruid = req.params.hruid; const submissionNumber = +req.params.id; @@ -17,6 +12,7 @@ export async function getSubmissionHandler(req: Request, 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, res: res.json(submission); } +export async function getAllSubmissionsHandler(req: Request, res: Response): Promise { + 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; diff --git a/backend/src/data/assignments/submission-repository.ts b/backend/src/data/assignments/submission-repository.ts index 251823fa..e7b51e13 100644 --- a/backend/src/data/assignments/submission-repository.ts +++ b/backend/src/data/assignments/submission-repository.ts @@ -14,6 +14,14 @@ export class SubmissionRepository extends DwengoEntityRepository { }); } + public findSubmissionsByLearningObject(loId: LearningObjectIdentifier): Promise { + return this.find({ + learningObjectHruid: loId.hruid, + learningObjectLanguage: loId.language, + learningObjectVersion: loId.version, + }) + } + public findMostRecentSubmissionForStudent(loId: LearningObjectIdentifier, submitter: Student): Promise { return this.findOne( { diff --git a/backend/src/services/submissions.ts b/backend/src/services/submissions.ts index a8fa96c7..a0863375 100644 --- a/backend/src/services/submissions.ts +++ b/backend/src/services/submissions.ts @@ -21,6 +21,19 @@ export async function getSubmission( return mapToSubmissionDTO(submission); } +export async function getAllSubmissions( + lohruid: string, + language: Language, + version: number, +): Promise { + 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); diff --git a/backend/tests/controllers/assignments.test.ts b/backend/tests/controllers/assignments.test.ts index bb9d80ed..38e73e17 100644 --- a/backend/tests/controllers/assignments.test.ts +++ b/backend/tests/controllers/assignments.test.ts @@ -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; let res: Partial;