From d8b97f3aea345ed7674fd0960956e20209d9843a Mon Sep 17 00:00:00 2001 From: Adriaan Jacquet Date: Wed, 12 Mar 2025 15:32:26 +0100 Subject: [PATCH] feat: verbinding student submissions --- backend/src/controllers/students.ts | 14 ++++++++++++++ .../data/assignments/submission-repository.ts | 8 ++++++++ backend/src/routes/students.ts | 7 ++----- backend/src/services/students.ts | 18 ++++++++++++++++++ 4 files changed, 42 insertions(+), 5 deletions(-) diff --git a/backend/src/controllers/students.ts b/backend/src/controllers/students.ts index a104979a..9a052a86 100644 --- a/backend/src/controllers/students.ts +++ b/backend/src/controllers/students.ts @@ -3,6 +3,7 @@ import { getStudentAssignments, getStudentClasses, getStudentGroups, + getStudentSubmissions, StudentService, } from '../services/students.js'; import { ClassDTO } from '../interfaces/class.js'; @@ -101,3 +102,16 @@ export async function getStudentGroupsHandler( groups: groups, }); } + +export async function getStudentSubmissionsHandler( + req: Request, + res: Response, +): Promise { + const username = req.params.id; + + const submissions = await getStudentSubmissions(username); + + res.json({ + submissions: submissions, + }); +} diff --git a/backend/src/data/assignments/submission-repository.ts b/backend/src/data/assignments/submission-repository.ts index a4d34826..6ec1217f 100644 --- a/backend/src/data/assignments/submission-repository.ts +++ b/backend/src/data/assignments/submission-repository.ts @@ -55,6 +55,14 @@ export class SubmissionRepository extends DwengoEntityRepository { ); } + public findAllSubmissionsForStudent( + student: Student, + ): Promise { + return this.find( + { submitter: student }, + ); + } + public deleteSubmissionByLearningObjectAndSubmissionNumber( loId: LearningObjectIdentifier, submissionNumber: number diff --git a/backend/src/routes/students.ts b/backend/src/routes/students.ts index c18b3e1c..0c8babce 100644 --- a/backend/src/routes/students.ts +++ b/backend/src/routes/students.ts @@ -7,6 +7,7 @@ import { getStudentClassesHandler, getStudentGroupsHandler, getStudentHandler, + getStudentSubmissionsHandler, } from '../controllers/students.js'; import { getStudentGroups } from '../services/students.js'; const router = express.Router(); @@ -25,11 +26,7 @@ router.get('/:username', getStudentHandler); router.get('/:id/classes', getStudentClassesHandler); // The list of submissions a student has made -router.get('/:id/submissions', (req, res) => { - res.json({ - submissions: ['0'], - }); -}); +router.get('/:id/submissions', getStudentSubmissionsHandler); // The list of assignments a student has router.get('/:id/assignments', getStudentAssignmentsHandler); diff --git a/backend/src/services/students.ts b/backend/src/services/students.ts index fc0a8e1d..9524f281 100644 --- a/backend/src/services/students.ts +++ b/backend/src/services/students.ts @@ -2,12 +2,14 @@ import { getClassRepository, getGroupRepository, getStudentRepository, + getSubmissionRepository, } from '../data/repositories.js'; import { Class } from '../entities/classes/class.entity.js'; import { Student } from '../entities/users/student.entity.js'; import { AssignmentDTO } from '../interfaces/assignment.js'; import { ClassDTO, mapToClassDTO } from '../interfaces/class.js'; import { GroupDTO, mapToGroupDTO, mapToGroupDTOId } from '../interfaces/group.js'; +import { mapToSubmissionDTO, SubmissionDTO } from '../interfaces/submission.js'; import { getAllAssignments } from './assignments.js'; import { UserService } from './users.js'; @@ -74,3 +76,19 @@ export async function getStudentGroups(username: string, full: boolean): Promise return groups.map(mapToGroupDTOId); } + +export async function getStudentSubmissions( + username: string +): Promise { + const studentRepository = getStudentRepository(); + const student = await studentRepository.findByUsername(username); + + if (!student) { + return []; + } + + const submissionRepository = getSubmissionRepository(); + const submissions = await submissionRepository.findAllSubmissionsForStudent(student); + + return submissions.map(mapToSubmissionDTO); +} \ No newline at end of file