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 { 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' }); | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
|  | @ -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, | ||||
| }; | ||||
|  | @ -1,6 +1,6 @@ | |||
| import express from 'express'; | ||||
| import { getSubmissionHandler } from '../controllers/submissions'; | ||||
| const router = express.Router(); | ||||
| const router = express.Router({ mergeParams: true }); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -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); | ||||
| } | ||||
		Reference in a new issue
	
	 Adriaan Jacquet
						Adriaan Jacquet