feat: requirefields in backend controllers (class, assignment, submission, group)
This commit is contained in:
		
							parent
							
								
									d2f5219b69
								
							
						
					
					
						commit
						c52bcde3ae
					
				
					 3 changed files with 38 additions and 63 deletions
				
			
		|  | @ -22,8 +22,8 @@ export async function createAssignmentHandler(req: Request, res: Response): Prom | |||
|     const title = req.body.title; | ||||
| 
 | ||||
|     requireFields({ description, language, learningPath, title }); | ||||
|     const assignmentData = req.body as AssignmentDTO; | ||||
| 
 | ||||
|     const assignmentData = req.body as AssignmentDTO; | ||||
|     const assignment = await createAssignment(classid, assignmentData); | ||||
| 
 | ||||
|     res.json({ assignment }); | ||||
|  |  | |||
|  | @ -1,29 +1,22 @@ | |||
| import { Request, Response } from 'express'; | ||||
| import { createGroup, getAllGroups, getGroup, getGroupSubmissions } from '../services/groups.js'; | ||||
| import { GroupDTO } from '@dwengo-1/common/interfaces/group'; | ||||
| import { requireFields } from './error-helper.js'; | ||||
| import { BadRequestException } from '../exceptions/bad-request-exception.js'; | ||||
| 
 | ||||
| // Typescript is annoywith with parameter forwarding from class.ts
 | ||||
| interface GroupParams { | ||||
|     classid: string; | ||||
|     assignmentid: string; | ||||
|     groupid?: string; | ||||
| } | ||||
| 
 | ||||
| export async function getGroupHandler(req: Request<GroupParams>, res: Response): Promise<void> { | ||||
| export async function getGroupHandler(req: Request, res: Response): Promise<void> { | ||||
|     const classId = req.params.classid; | ||||
|     const assignmentId = parseInt(req.params.assignmentid); | ||||
|     const groupId = parseInt(req.params.groupid); | ||||
|     const full = req.query.full === 'true'; | ||||
|     const assignmentId = Number(req.params.assignmentid); | ||||
|     requireFields({ classId, assignmentId, groupId }); | ||||
| 
 | ||||
|     if (isNaN(assignmentId)) { | ||||
|         res.status(400).json({ error: 'Assignment id must be a number' }); | ||||
|         return; | ||||
|         throw new BadRequestException('Assignment id must be a number'); | ||||
|     } | ||||
| 
 | ||||
|     const groupId = Number(req.params.groupid!); // Can't be undefined
 | ||||
| 
 | ||||
|     if (isNaN(groupId)) { | ||||
|         res.status(400).json({ error: 'Group id must be a number' }); | ||||
|         return; | ||||
|         throw new BadRequestException('Group id must be a number'); | ||||
|     } | ||||
| 
 | ||||
|     const group = await getGroup(classId, assignmentId, groupId, full); | ||||
|  | @ -33,68 +26,57 @@ export async function getGroupHandler(req: Request<GroupParams>, res: Response): | |||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     res.json(group); | ||||
|     res.json({ group }); | ||||
| } | ||||
| 
 | ||||
| export async function getAllGroupsHandler(req: Request, res: Response): Promise<void> { | ||||
|     const classId = req.params.classid; | ||||
|     const full = req.query.full === 'true'; | ||||
| 
 | ||||
|     const assignmentId = Number(req.params.assignmentid); | ||||
|     const full = req.query.full === 'true'; | ||||
|     requireFields({ classId, assignmentId }); | ||||
| 
 | ||||
|     if (isNaN(assignmentId)) { | ||||
|         res.status(400).json({ error: 'Assignment id must be a number' }); | ||||
|         return; | ||||
|         throw new BadRequestException('Assignment id must be a number'); | ||||
|     } | ||||
| 
 | ||||
|     const groups = await getAllGroups(classId, assignmentId, full); | ||||
| 
 | ||||
|     res.json({ | ||||
|         groups: groups, | ||||
|     }); | ||||
|     res.json({ groups }); | ||||
| } | ||||
| 
 | ||||
| export async function createGroupHandler(req: Request, res: Response): Promise<void> { | ||||
|     const classid = req.params.classid; | ||||
|     const assignmentId = Number(req.params.assignmentid); | ||||
| 
 | ||||
|     requireFields({ classid, assignmentId }); | ||||
| 
 | ||||
|     if (isNaN(assignmentId)) { | ||||
|         res.status(400).json({ error: 'Assignment id must be a number' }); | ||||
|         return; | ||||
|         throw new BadRequestException('Assignment id must be a number'); | ||||
|     } | ||||
| 
 | ||||
|     const groupData = req.body as GroupDTO; | ||||
|     const group = await createGroup(groupData, classid, assignmentId); | ||||
| 
 | ||||
|     if (!group) { | ||||
|         res.status(500).json({ error: 'Something went wrong while creating group' }); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     res.status(201).json(group); | ||||
|     res.status(201).json({ group }); | ||||
| } | ||||
| 
 | ||||
| export async function getGroupSubmissionsHandler(req: Request, res: Response): Promise<void> { | ||||
|     const classId = req.params.classid; | ||||
|     const full = req.query.full === 'true'; | ||||
| 
 | ||||
|     const assignmentId = Number(req.params.assignmentid); | ||||
|     const groupId = Number(req.params.groupid); | ||||
|     const full = req.query.full === 'true'; | ||||
|      | ||||
|     requireFields({ classId, assignmentId, groupId }); | ||||
| 
 | ||||
|     if (isNaN(assignmentId)) { | ||||
|         res.status(400).json({ error: 'Assignment id must be a number' }); | ||||
|         return; | ||||
|         throw new BadRequestException('Assignment id must be a number'); | ||||
|     } | ||||
| 
 | ||||
|     const groupId = Number(req.params.groupid); // Can't be undefined
 | ||||
| 
 | ||||
|     if (isNaN(groupId)) { | ||||
|         res.status(400).json({ error: 'Group id must be a number' }); | ||||
|         return; | ||||
|         throw new BadRequestException('Group id must be a number'); | ||||
|     } | ||||
| 
 | ||||
|     const submissions = await getGroupSubmissions(classId, assignmentId, groupId, full); | ||||
| 
 | ||||
|     res.json({ | ||||
|         submissions: submissions, | ||||
|     }); | ||||
|     res.json({ submissions }); | ||||
| } | ||||
|  |  | |||
|  | @ -5,22 +5,22 @@ import { NotFoundException } from '../exceptions/not-found-exception.js'; | |||
| import { LearningObjectIdentifier } from '../entities/content/learning-object-identifier.js'; | ||||
| import { Language, languageMap } from '@dwengo-1/common/util/language'; | ||||
| import { SubmissionDTO } from '@dwengo-1/common/interfaces/submission'; | ||||
| import { requireFields } from './error-helper.js'; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| export async function getSubmissionHandler(req: Request, res: Response): Promise<void> { | ||||
|     const submissionNumber = +req.params.id; | ||||
|     const lohruid = req.params.hruid; | ||||
|     const lang = languageMap[req.query.language as string] || Language.Dutch; | ||||
|     const version = (req.query.version || 1) as number; | ||||
|     const submissionNumber = Number(req.params.id); | ||||
|     requireFields({ lohruid, submissionNumber }); | ||||
|      | ||||
|     if (isNaN(submissionNumber)) { | ||||
|         throw new BadRequestException('Submission number must be a number'); | ||||
|     } | ||||
|      | ||||
|     const lohruid = req.params.hruid; | ||||
|     const lang = languageMap[req.query.language as string] || Language.Dutch; | ||||
|     const version = (req.query.version || 1) as number; | ||||
| 
 | ||||
|     const loId = new LearningObjectIdentifier(lohruid, lang, version); | ||||
| 
 | ||||
|     const submission = await getSubmission(loId, submissionNumber); | ||||
| 
 | ||||
|     res.json({ submission }); | ||||
|  | @ -30,9 +30,9 @@ export async function getAllSubmissionsHandler(req: Request, res: Response): Pro | |||
|     const lohruid = req.params.hruid; | ||||
|     const lang = languageMap[req.query.language as string] || Language.Dutch; | ||||
|     const version = (req.query.version || 1) as number; | ||||
|     requireFields({ lohruid }); | ||||
| 
 | ||||
|     const loId = new LearningObjectIdentifier(lohruid, lang, version); | ||||
| 
 | ||||
|     const submissions = await getAllSubmissions(loId); | ||||
| 
 | ||||
|     res.json({ submissions }); | ||||
|  | @ -40,31 +40,24 @@ export async function getAllSubmissionsHandler(req: Request, res: Response): Pro | |||
| 
 | ||||
| export async function createSubmissionHandler(req: Request, res: Response): Promise<void> { | ||||
|     const submissionDTO = req.body as SubmissionDTO; | ||||
| 
 | ||||
|     const submission = await createSubmission(submissionDTO); | ||||
| 
 | ||||
|     if (!submission) { | ||||
|         res.status(400).json({ error: 'Failed to create submission' }); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     res.json({ submission }); | ||||
| } | ||||
| 
 | ||||
| export async function deleteSubmissionHandler(req: Request, res: Response): Promise<void> { | ||||
|     const hruid = req.params.hruid; | ||||
|     const submissionNumber = Number(req.params.id); | ||||
| 
 | ||||
|     const lang = languageMap[req.query.language as string] || Language.Dutch; | ||||
|     const version = (req.query.version || 1) as number; | ||||
|     const submissionNumber = Number(req.params.id); | ||||
|     requireFields({ hruid, submissionNumber }); | ||||
| 
 | ||||
|     if (isNaN(submissionNumber)) { | ||||
|         throw new BadRequestException('Submission number must be a number');  | ||||
|     } | ||||
| 
 | ||||
|     const loId = new LearningObjectIdentifier(hruid, lang, version); | ||||
| 
 | ||||
|     const submission = await deleteSubmission(loId, submissionNumber); | ||||
| 
 | ||||
|     if (!submission) { | ||||
|         throw new NotFoundException('Could not delete submission'); | ||||
|     } | ||||
| 
 | ||||
|     res.json({ submission }); | ||||
| } | ||||
|  |  | |||
		Reference in a new issue
	
	 Adriaan Jacquet
						Adriaan Jacquet