feat: verbinding tussen groepen en hun submissions
This commit is contained in:
		
							parent
							
								
									d8b97f3aea
								
							
						
					
					
						commit
						e8975878aa
					
				
					 3 changed files with 72 additions and 2 deletions
				
			
		|  | @ -1,5 +1,5 @@ | |||
| import { Request, Response } from 'express'; | ||||
| import { getAllGroups, getGroup } from '../services/groups.js'; | ||||
| import { getAllGroups, getGroup, getGroupSubmissions } from '../services/groups.js'; | ||||
| 
 | ||||
| // Typescript is annoywith with parameter forwarding from class.ts
 | ||||
| interface GroupParams { | ||||
|  | @ -53,3 +53,31 @@ export async function getAllGroupsHandler( | |||
|         groups: groups, | ||||
|     }); | ||||
| } | ||||
| 
 | ||||
| export async function getGroupSubmissionsHandler( | ||||
|     req: Request, | ||||
|     res: Response, | ||||
| ): Promise<void> { | ||||
|     const classId = req.params.classid; | ||||
|     // const full = req.query.full === 'true';
 | ||||
| 
 | ||||
|     const assignmentId = +req.params.assignmentid; | ||||
| 
 | ||||
|     if (isNaN(assignmentId)) { | ||||
|         res.status(400).json({ error: 'Assignment id must be a number' }); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     const groupId = +req.params.groupid!; // Can't be undefined
 | ||||
| 
 | ||||
|     if (isNaN(groupId)) { | ||||
|         res.status(400).json({ error: 'Group id must be a number' }); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     const submissions = await getGroupSubmissions(classId, assignmentId, groupId); | ||||
| 
 | ||||
|     res.json({ | ||||
|         submissions: submissions, | ||||
|     }); | ||||
| } | ||||
|  | @ -1,5 +1,5 @@ | |||
| import express from 'express'; | ||||
| import { getAllGroupsHandler, getGroupHandler } from '../controllers/groups.js'; | ||||
| import { getAllGroupsHandler, getGroupHandler, getGroupSubmissionsHandler } from '../controllers/groups.js'; | ||||
| 
 | ||||
| const router = express.Router({ mergeParams: true }); | ||||
| 
 | ||||
|  | @ -9,6 +9,8 @@ router.get('/', getAllGroupsHandler); | |||
| // Information about a group (members, ... [TODO DOC])
 | ||||
| router.get('/:groupid', getGroupHandler); | ||||
| 
 | ||||
| router.get('/:groupid', getGroupSubmissionsHandler); | ||||
| 
 | ||||
| // The list of questions a group has made
 | ||||
| router.get('/:id/question', (req, res) => { | ||||
|     res.json({ | ||||
|  |  | |||
|  | @ -2,12 +2,14 @@ import { | |||
|     getAssignmentRepository, | ||||
|     getClassRepository, | ||||
|     getGroupRepository, | ||||
|     getSubmissionRepository, | ||||
| } from '../data/repositories.js'; | ||||
| import { | ||||
|     GroupDTO, | ||||
|     mapToGroupDTO, | ||||
|     mapToGroupDTOId, | ||||
| } from '../interfaces/group.js'; | ||||
| import { mapToSubmissionDTO, SubmissionDTO } from '../interfaces/submission.js'; | ||||
| 
 | ||||
| export async function getGroup( | ||||
|     classId: string, | ||||
|  | @ -82,3 +84,41 @@ export async function getAllGroups( | |||
| 
 | ||||
|     return groups.map(mapToGroupDTOId); | ||||
| } | ||||
| 
 | ||||
| export async function getGroupSubmissions( | ||||
|     classId: string, | ||||
|     assignmentNumber: number, | ||||
|     groupNumber: number, | ||||
| ): Promise<SubmissionDTO[]> { | ||||
|     const classRepository = getClassRepository(); | ||||
|     const cls = await classRepository.findById(classId); | ||||
| 
 | ||||
|     if (!cls) { | ||||
|         return []; | ||||
|     } | ||||
| 
 | ||||
|     const assignmentRepository = getAssignmentRepository(); | ||||
|     const assignment = await assignmentRepository.findByClassAndId( | ||||
|         cls, | ||||
|         assignmentNumber | ||||
|     ); | ||||
| 
 | ||||
|     if (!assignment) { | ||||
|         return []; | ||||
|     } | ||||
| 
 | ||||
|     const groupRepository = getGroupRepository(); | ||||
|     const group = await groupRepository.findByAssignmentAndGroupNumber( | ||||
|         assignment, | ||||
|         groupNumber | ||||
|     ); | ||||
| 
 | ||||
|     if (!group) { | ||||
|         return []; | ||||
|     } | ||||
| 
 | ||||
|     const submissionRepository = getSubmissionRepository(); | ||||
|     const submissions = await submissionRepository.findAllSubmissionsForGroup(group); | ||||
| 
 | ||||
|     return submissions.map(mapToSubmissionDTO); | ||||
| } | ||||
|  |  | |||
		Reference in a new issue
	
	 Adriaan Jacquet
						Adriaan Jacquet