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); | ||||||
|  | } | ||||||
		Reference in a new issue
	
	 Adriaan Jacquet
						Adriaan Jacquet