feat: submission endpoint geimplementeerd (ongetest)
This commit is contained in:
		
							parent
							
								
									b3299949b0
								
							
						
					
					
						commit
						7c453467df
					
				
					 5 changed files with 85 additions and 10 deletions
				
			
		
							
								
								
									
										25
									
								
								backend/src/controllers/submissions.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								backend/src/controllers/submissions.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | |||
| import { Request, Response } from "express"; | ||||
| import { getSubmission } from "../services/submissions"; | ||||
| import { Language } from "../entities/content/language"; | ||||
| 
 | ||||
| interface SubmissionParams { | ||||
|     lohruid: string, | ||||
|     submissionNumber: number; | ||||
| } | ||||
| 
 | ||||
| export async function getSubmissionHandler( | ||||
|     req: Request<SubmissionParams>, | ||||
|     res: Response, | ||||
| ): Promise<void> { | ||||
|     const lohruid = req.params.lohruid; | ||||
|     const submissionNumber = req.params.submissionNumber; | ||||
| 
 | ||||
|     const submission = getSubmission(lohruid, Language.Dutch, '1', submissionNumber); | ||||
| 
 | ||||
|     if (!submission) { | ||||
|         res.status(404).json({ error: 'Submission not found' }); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     res.json(submission); | ||||
| } | ||||
							
								
								
									
										30
									
								
								backend/src/interfaces/submission.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								backend/src/interfaces/submission.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,30 @@ | |||
| import { Submission } from "../entities/assignments/submission.entity"; | ||||
| import { Language } from "../entities/content/language"; | ||||
| import { GroupDTO, mapToGroupDTO } from "./group"; | ||||
| import { mapToStudentDTO, StudentDTO } from "./student"; | ||||
| 
 | ||||
| export interface SubmissionDTO { | ||||
|     learningObjectHruid: string, | ||||
|     learningObjectLanguage: Language, | ||||
|     learningObjectVersion: string, | ||||
| 
 | ||||
|     submissionNumber: number, | ||||
|     submitter: StudentDTO | string, | ||||
|     time: Date, | ||||
|     group?: GroupDTO | string, | ||||
|     content: string, | ||||
| } | ||||
| 
 | ||||
| export function mapToSubmissionDTO(submission: Submission): SubmissionDTO { | ||||
|     return { | ||||
|         learningObjectHruid: submission.learningObjectHruid, | ||||
|         learningObjectLanguage: submission.learningObjectLanguage, | ||||
|         learningObjectVersion: submission.learningObjectVersion, | ||||
| 
 | ||||
|         submissionNumber: submission.submissionNumber, | ||||
|         submitter: mapToStudentDTO(submission.submitter), | ||||
|         time: submission.submissionTime, | ||||
|         group: submission.onBehalfOf ? mapToGroupDTO(submission.onBehalfOf) : undefined, | ||||
|         content: submission.content, | ||||
|     } | ||||
| } | ||||
|  | @ -4,6 +4,8 @@ import { | |||
|     getLearningObject, | ||||
| } from '../controllers/learning-objects.js'; | ||||
| 
 | ||||
| import submissionRoutes from './submissions.js'; | ||||
| 
 | ||||
| const router = express.Router(); | ||||
| 
 | ||||
| // DWENGO learning objects
 | ||||
|  | @ -24,4 +26,6 @@ router.get('/', getAllLearningObjects); | |||
| // Example: http://localhost:3000/learningObject/un_ai7
 | ||||
| router.get('/:hruid', getLearningObject); | ||||
| 
 | ||||
| router.use('/:hruid/submissions', submissionRoutes); | ||||
| 
 | ||||
| export default router; | ||||
|  |  | |||
|  | @ -1,6 +1,9 @@ | |||
| import express from 'express'; | ||||
| import { getSubmissionHandler } from '../controllers/submissions'; | ||||
| const router = express.Router(); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| // Root endpoint used to search objects
 | ||||
| router.get('/', (req, res) => { | ||||
|     res.json({ | ||||
|  | @ -9,15 +12,6 @@ router.get('/', (req, res) => { | |||
| }); | ||||
| 
 | ||||
| // Information about an submission with id 'id'
 | ||||
| router.get('/:id', (req, res) => { | ||||
|     res.json({ | ||||
|         id: req.params.id, | ||||
|         student: '0', | ||||
|         group: '0', | ||||
|         time: new Date(2025, 1, 1), | ||||
|         content: 'Wortel 2 is rationeel', | ||||
|         learningObject: '0', | ||||
|     }); | ||||
| }); | ||||
| router.get('/:id', getSubmissionHandler); | ||||
| 
 | ||||
| export default router; | ||||
|  |  | |||
							
								
								
									
										22
									
								
								backend/src/services/submissions.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								backend/src/services/submissions.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,22 @@ | |||
| import { getSubmissionRepository } from "../data/repositories"; | ||||
| import { Language } from "../entities/content/language"; | ||||
| import { LearningObjectIdentifier } from "../entities/content/learning-object-identifier"; | ||||
| import { mapToSubmissionDTO, SubmissionDTO } from "../interfaces/submission"; | ||||
| 
 | ||||
| export async function getSubmission( | ||||
|     learningObjectHruid: string, | ||||
|     language: Language, | ||||
|     version: string, | ||||
|     submissionNumber: number,  | ||||
| ): Promise<SubmissionDTO | null> { | ||||
|     const loId = new LearningObjectIdentifier(learningObjectHruid, language, version);  | ||||
| 
 | ||||
|     const submissionRepository = getSubmissionRepository(); | ||||
|     const submission = await submissionRepository.findSubmissionByLearningObjectAndSubmissionNumber(loId, submissionNumber); | ||||
| 
 | ||||
|     if (!submission) { | ||||
|         return null; | ||||
|     } | ||||
| 
 | ||||
|     return mapToSubmissionDTO(submission); | ||||
| } | ||||
		Reference in a new issue
	
	 Adriaan Jacquet
						Adriaan Jacquet