feat: submission route post delete
This commit is contained in:
		
							parent
							
								
									911e17771f
								
							
						
					
					
						commit
						d9eb8def72
					
				
					 6 changed files with 100 additions and 17 deletions
				
			
		|  | @ -1,28 +1,29 @@ | |||
| import { Request, Response } from "express"; | ||||
| import { getSubmission } from "../services/submissions.js"; | ||||
| import {createSubmission, deleteSubmission, getSubmission} from "../services/submissions.js"; | ||||
| import { Language, languageMap } from "../entities/content/language.js"; | ||||
| import {SubmissionDTO} from "../interfaces/submission"; | ||||
| 
 | ||||
| interface SubmissionParams { | ||||
|     lohruid: string, | ||||
|     submissionNumber: number; | ||||
|     hruid: string, | ||||
|     id: number; | ||||
| } | ||||
| 
 | ||||
| export async function getSubmissionHandler( | ||||
|     req: Request<SubmissionParams>, | ||||
|     res: Response, | ||||
| ): Promise<void> { | ||||
|     const lohruid = req.params.lohruid; | ||||
|     const submissionNumber = +req.params.submissionNumber; | ||||
|     const lohruid = req.params.hruid; | ||||
|     const submissionNumber = +req.params.id; | ||||
| 
 | ||||
|     if (isNaN(submissionNumber)) { | ||||
|         res.status(404).json({ error: 'Submission number is not a number' }); | ||||
|         res.status(400).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); | ||||
|     const submission = await getSubmission(lohruid, lang, version, submissionNumber); | ||||
| 
 | ||||
|     if (!submission) { | ||||
|         res.status(404).json({ error: 'Submission not found' }); | ||||
|  | @ -31,3 +32,29 @@ export async function getSubmissionHandler( | |||
| 
 | ||||
|     res.json(submission); | ||||
| } | ||||
| 
 | ||||
| export async function createSubmissionHandler(req: Request, res: Response){ | ||||
|     const submissionDTO = req.body as SubmissionDTO; | ||||
| 
 | ||||
|     const submission = await createSubmission(submissionDTO); | ||||
| 
 | ||||
|     if (!submission) | ||||
|         res.status(404).json({ error: 'Submission not added' }); | ||||
|     else | ||||
|         res.json(submission) | ||||
| } | ||||
| 
 | ||||
| export async function deleteSubmissionHandler(req: Request, res: Response){ | ||||
|     const hruid = req.params.hruid; | ||||
|     const submissionNumber = +req.params.id; | ||||
| 
 | ||||
|     let lang = languageMap[req.query.language as string] || Language.Dutch; | ||||
|     let version = req.query.version as string || '1'; | ||||
| 
 | ||||
|     const submission = await deleteSubmission(hruid, lang, version, submissionNumber); | ||||
| 
 | ||||
|     if (!submission) | ||||
|         res.status(404).json({ error: 'Submission not found' }); | ||||
|     else | ||||
|         res.json(submission) | ||||
| } | ||||
|  |  | |||
|  | @ -1,17 +1,19 @@ | |||
| import { Submission } from "../entities/assignments/submission.entity.js"; | ||||
| import { Language } from "../entities/content/language.js"; | ||||
| import { GroupDTO, mapToGroupDTO } from "./group.js"; | ||||
| import { mapToStudentDTO, StudentDTO } from "./student.js"; | ||||
| import {mapToStudent, mapToStudentDTO, StudentDTO} from "./student.js"; | ||||
| import {mapToUser} from "./user"; | ||||
| import {Student} from "../entities/users/student.entity"; | ||||
| 
 | ||||
| export interface SubmissionDTO { | ||||
|     learningObjectHruid: string, | ||||
|     learningObjectLanguage: Language, | ||||
|     learningObjectVersion: string, | ||||
| 
 | ||||
|     submissionNumber: number, | ||||
|     submitter: StudentDTO | string, | ||||
|     time: Date, | ||||
|     group?: GroupDTO | string, | ||||
|     submissionNumber?: number, | ||||
|     submitter: StudentDTO, | ||||
|     time?: Date, | ||||
|     group?: GroupDTO, | ||||
|     content: string, | ||||
| } | ||||
| 
 | ||||
|  | @ -28,3 +30,18 @@ export function mapToSubmissionDTO(submission: Submission): SubmissionDTO { | |||
|         content: submission.content, | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| export function mapToSubmission(submissionDTO: SubmissionDTO): Submission { | ||||
|     const submission = new Submission(); | ||||
|     submission.learningObjectHruid = submissionDTO.learningObjectHruid; | ||||
|     submission.learningObjectLanguage = submissionDTO.learningObjectLanguage; | ||||
|     submission.learningObjectVersion = submissionDTO.learningObjectVersion; | ||||
|     // submission.submissionNumber = submissionDTO.submissionNumber;
 | ||||
|     submission.submitter = mapToStudent(submissionDTO.submitter) ; | ||||
|     // submission.submissionTime = submissionDTO.time;
 | ||||
|     // submission.onBehalfOf =  submissionDTO.group!;
 | ||||
|     // TODO fix group
 | ||||
|     submission.content = submissionDTO.content; | ||||
| 
 | ||||
|     return submission; | ||||
| } | ||||
|  |  | |||
|  | @ -24,6 +24,6 @@ export function mapToTeacherInvitationDTOIds( | |||
|     return { | ||||
|         sender: invitation.sender.username, | ||||
|         receiver: invitation.receiver.username, | ||||
|         class: invitation.class.classId, | ||||
|         class: invitation.class.classId!, | ||||
|     }; | ||||
| } | ||||
|  |  | |||
|  | @ -12,7 +12,7 @@ router.get('/:groupid', getGroupHandler); | |||
| router.get('/:groupid', getGroupSubmissionsHandler); | ||||
| 
 | ||||
| // The list of questions a group has made
 | ||||
| router.get('/:id/question', (req, res) => { | ||||
| router.get('/:id/questions', (req, res) => { | ||||
|     res.json({ | ||||
|         questions: ['0'], | ||||
|     }); | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| import express from 'express'; | ||||
| import { getSubmissionHandler } from '../controllers/submissions.js'; | ||||
| import {createSubmissionHandler, deleteSubmissionHandler, getSubmissionHandler} from '../controllers/submissions.js'; | ||||
| const router = express.Router({ mergeParams: true }); | ||||
| 
 | ||||
| 
 | ||||
|  | @ -11,7 +11,11 @@ router.get('/', (req, res) => { | |||
|     }); | ||||
| }); | ||||
| 
 | ||||
| router.post('/:id', createSubmissionHandler); | ||||
| 
 | ||||
| // Information about an submission with id 'id'
 | ||||
| router.get('/:id', getSubmissionHandler); | ||||
| 
 | ||||
| router.delete('/:id', deleteSubmissionHandler); | ||||
| 
 | ||||
| export default router; | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| import { getSubmissionRepository } from "../data/repositories.js"; | ||||
| import {getGroupRepository, getSubmissionRepository} from "../data/repositories.js"; | ||||
| import { Language } from "../entities/content/language.js"; | ||||
| import { LearningObjectIdentifier } from "../entities/content/learning-object-identifier.js"; | ||||
| import { mapToSubmissionDTO, SubmissionDTO } from "../interfaces/submission.js"; | ||||
| import {mapToSubmission, mapToSubmissionDTO, SubmissionDTO} from "../interfaces/submission.js"; | ||||
| 
 | ||||
| export async function getSubmission( | ||||
|     learningObjectHruid: string, | ||||
|  | @ -20,3 +20,38 @@ export async function getSubmission( | |||
| 
 | ||||
|     return mapToSubmissionDTO(submission); | ||||
| } | ||||
| 
 | ||||
| export async function createSubmission(submissionDTO: SubmissionDTO) { | ||||
|     const submissionRepository = getSubmissionRepository(); | ||||
|     const submission = mapToSubmission(submissionDTO); | ||||
| 
 | ||||
|     try { | ||||
|         const newSubmission = await submissionRepository.create(submission); | ||||
|         await submissionRepository.save(newSubmission); | ||||
|     } catch (e) { | ||||
|         return null | ||||
|     } | ||||
| 
 | ||||
|     return submission; | ||||
| } | ||||
| 
 | ||||
| export async function deleteSubmission( | ||||
|     learningObjectHruid: string, | ||||
|     language: Language, | ||||
|     version: string, | ||||
|     submissionNumber: number | ||||
| ) { | ||||
|     const submissionRepository = getSubmissionRepository(); | ||||
| 
 | ||||
|     const submission = getSubmission(learningObjectHruid, language, version, submissionNumber); | ||||
| 
 | ||||
|     if (!submission) | ||||
|         return null | ||||
| 
 | ||||
|     const loId = new LearningObjectIdentifier(learningObjectHruid, language, version); | ||||
|     await submissionRepository.deleteSubmissionByLearningObjectAndSubmissionNumber(loId, submissionNumber); | ||||
| 
 | ||||
|     return submission; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
		Reference in a new issue
	
	 Gabriellvl
						Gabriellvl