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 { 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 { Language, languageMap } from "../entities/content/language.js"; | ||||||
|  | import {SubmissionDTO} from "../interfaces/submission"; | ||||||
| 
 | 
 | ||||||
| interface SubmissionParams { | interface SubmissionParams { | ||||||
|     lohruid: string, |     hruid: string, | ||||||
|     submissionNumber: number; |     id: number; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export async function getSubmissionHandler( | export async function getSubmissionHandler( | ||||||
|     req: Request<SubmissionParams>, |     req: Request<SubmissionParams>, | ||||||
|     res: Response, |     res: Response, | ||||||
| ): Promise<void> { | ): Promise<void> { | ||||||
|     const lohruid = req.params.lohruid; |     const lohruid = req.params.hruid; | ||||||
|     const submissionNumber = +req.params.submissionNumber; |     const submissionNumber = +req.params.id; | ||||||
| 
 | 
 | ||||||
|     if (isNaN(submissionNumber)) { |     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; |         return; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     let lang = languageMap[req.query.language as string] || Language.Dutch; |     let lang = languageMap[req.query.language as string] || Language.Dutch; | ||||||
|     let version = req.query.version as string || '1'; |     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) { |     if (!submission) { | ||||||
|         res.status(404).json({ error: 'Submission not found' }); |         res.status(404).json({ error: 'Submission not found' }); | ||||||
|  | @ -31,3 +32,29 @@ export async function getSubmissionHandler( | ||||||
| 
 | 
 | ||||||
|     res.json(submission); |     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 { Submission } from "../entities/assignments/submission.entity.js"; | ||||||
| import { Language } from "../entities/content/language.js"; | import { Language } from "../entities/content/language.js"; | ||||||
| import { GroupDTO, mapToGroupDTO } from "./group.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 { | export interface SubmissionDTO { | ||||||
|     learningObjectHruid: string, |     learningObjectHruid: string, | ||||||
|     learningObjectLanguage: Language, |     learningObjectLanguage: Language, | ||||||
|     learningObjectVersion: string, |     learningObjectVersion: string, | ||||||
| 
 | 
 | ||||||
|     submissionNumber: number, |     submissionNumber?: number, | ||||||
|     submitter: StudentDTO | string, |     submitter: StudentDTO, | ||||||
|     time: Date, |     time?: Date, | ||||||
|     group?: GroupDTO | string, |     group?: GroupDTO, | ||||||
|     content: string, |     content: string, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -28,3 +30,18 @@ export function mapToSubmissionDTO(submission: Submission): SubmissionDTO { | ||||||
|         content: submission.content, |         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 { |     return { | ||||||
|         sender: invitation.sender.username, |         sender: invitation.sender.username, | ||||||
|         receiver: invitation.receiver.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); | router.get('/:groupid', getGroupSubmissionsHandler); | ||||||
| 
 | 
 | ||||||
| // The list of questions a group has made
 | // The list of questions a group has made
 | ||||||
| router.get('/:id/question', (req, res) => { | router.get('/:id/questions', (req, res) => { | ||||||
|     res.json({ |     res.json({ | ||||||
|         questions: ['0'], |         questions: ['0'], | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| import express from 'express'; | import express from 'express'; | ||||||
| import { getSubmissionHandler } from '../controllers/submissions.js'; | import {createSubmissionHandler, deleteSubmissionHandler, getSubmissionHandler} from '../controllers/submissions.js'; | ||||||
| const router = express.Router({ mergeParams: true }); | 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'
 | // Information about an submission with id 'id'
 | ||||||
| router.get('/:id', getSubmissionHandler); | router.get('/:id', getSubmissionHandler); | ||||||
| 
 | 
 | ||||||
|  | router.delete('/:id', deleteSubmissionHandler); | ||||||
|  | 
 | ||||||
| export default router; | 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 { Language } from "../entities/content/language.js"; | ||||||
| import { LearningObjectIdentifier } from "../entities/content/learning-object-identifier.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( | export async function getSubmission( | ||||||
|     learningObjectHruid: string, |     learningObjectHruid: string, | ||||||
|  | @ -20,3 +20,38 @@ export async function getSubmission( | ||||||
| 
 | 
 | ||||||
|     return mapToSubmissionDTO(submission); |     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