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, |     getLearningObject, | ||||||
| } from '../controllers/learning-objects.js'; | } from '../controllers/learning-objects.js'; | ||||||
| 
 | 
 | ||||||
|  | import submissionRoutes from './submissions.js'; | ||||||
|  | 
 | ||||||
| const router = express.Router(); | const router = express.Router(); | ||||||
| 
 | 
 | ||||||
| // DWENGO learning objects
 | // DWENGO learning objects
 | ||||||
|  | @ -24,4 +26,6 @@ router.get('/', getAllLearningObjects); | ||||||
| // Example: http://localhost:3000/learningObject/un_ai7
 | // Example: http://localhost:3000/learningObject/un_ai7
 | ||||||
| router.get('/:hruid', getLearningObject); | router.get('/:hruid', getLearningObject); | ||||||
| 
 | 
 | ||||||
|  | router.use('/:hruid/submissions', submissionRoutes); | ||||||
|  | 
 | ||||||
| export default router; | export default router; | ||||||
|  |  | ||||||
|  | @ -1,6 +1,9 @@ | ||||||
| import express from 'express'; | import express from 'express'; | ||||||
|  | import { getSubmissionHandler } from '../controllers/submissions'; | ||||||
| const router = express.Router(); | const router = express.Router(); | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| // Root endpoint used to search objects
 | // Root endpoint used to search objects
 | ||||||
| router.get('/', (req, res) => { | router.get('/', (req, res) => { | ||||||
|     res.json({ |     res.json({ | ||||||
|  | @ -9,15 +12,6 @@ router.get('/', (req, res) => { | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| // Information about an submission with id 'id'
 | // Information about an submission with id 'id'
 | ||||||
| router.get('/:id', (req, res) => { | router.get('/:id', getSubmissionHandler); | ||||||
|     res.json({ |  | ||||||
|         id: req.params.id, |  | ||||||
|         student: '0', |  | ||||||
|         group: '0', |  | ||||||
|         time: new Date(2025, 1, 1), |  | ||||||
|         content: 'Wortel 2 is rationeel', |  | ||||||
|         learningObject: '0', |  | ||||||
|     }); |  | ||||||
| }); |  | ||||||
| 
 | 
 | ||||||
| export default router; | 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