feat: DELETE voor group geimplementeerd
This commit is contained in:
		
							parent
							
								
									2ec5e02061
								
							
						
					
					
						commit
						709d5f019a
					
				
					 3 changed files with 32 additions and 11 deletions
				
			
		|  | @ -1,14 +1,11 @@ | ||||||
| import { Request, Response } from 'express'; | import { Request, Response } from 'express'; | ||||||
| import { createGroup, getAllGroups, getGroup, getGroupSubmissions } from '../services/groups.js'; | import { createGroup, deleteGroup, getAllGroups, getGroup, getGroupSubmissions } from '../services/groups.js'; | ||||||
| import { GroupDTO } from '@dwengo-1/common/interfaces/group'; | import { GroupDTO } from '@dwengo-1/common/interfaces/group'; | ||||||
| import { requireFields } from './error-helper.js'; | import { requireFields } from './error-helper.js'; | ||||||
| import { BadRequestException } from '../exceptions/bad-request-exception.js'; | import { BadRequestException } from '../exceptions/bad-request-exception.js'; | ||||||
| import { getLogger } from '../logging/initalize.js'; | import { getLogger } from '../logging/initalize.js'; | ||||||
| 
 | 
 | ||||||
| export async function getGroupHandler(req: Request, res: Response): Promise<void> { | function checkGroupFields(classId: any, assignmentId: any, groupId: any) { | ||||||
|     const classId = req.params.classid; |  | ||||||
|     const assignmentId = parseInt(req.params.assignmentid); |  | ||||||
|     const groupId = parseInt(req.params.groupid); |  | ||||||
|     requireFields({ classId, assignmentId, groupId }); |     requireFields({ classId, assignmentId, groupId }); | ||||||
| 
 | 
 | ||||||
|     if (isNaN(assignmentId)) { |     if (isNaN(assignmentId)) { | ||||||
|  | @ -18,13 +15,26 @@ export async function getGroupHandler(req: Request, res: Response): Promise<void | ||||||
|     if (isNaN(groupId)) { |     if (isNaN(groupId)) { | ||||||
|         throw new BadRequestException('Group id must be a number'); |         throw new BadRequestException('Group id must be a number'); | ||||||
|     } |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 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); | ||||||
|  |     checkGroupFields(classId, assignmentId, groupId); | ||||||
| 
 | 
 | ||||||
|     const group = await getGroup(classId, assignmentId, groupId); |     const group = await getGroup(classId, assignmentId, groupId); | ||||||
| 
 | 
 | ||||||
|     if (!group) { |     res.json({ group }); | ||||||
|         res.status(404).json({ error: 'Group not found' }); | } | ||||||
|         return; | 
 | ||||||
|     } | export async function deleteGroupHandler(req: Request, res: Response): Promise<void> { | ||||||
|  |     const classId = req.params.classid; | ||||||
|  |     const assignmentId = parseInt(req.params.assignmentid); | ||||||
|  |     const groupId = parseInt(req.params.groupid); | ||||||
|  |     checkGroupFields(classId, assignmentId, groupId); | ||||||
|  | 
 | ||||||
|  |     const group = await deleteGroup(classId, assignmentId, groupId); | ||||||
| 
 | 
 | ||||||
|     res.json({ group }); |     res.json({ group }); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| import express from 'express'; | import express from 'express'; | ||||||
| import { createGroupHandler, getAllGroupsHandler, getGroupHandler, getGroupSubmissionsHandler } from '../controllers/groups.js'; | import { createGroupHandler, deleteGroupHandler, getAllGroupsHandler, getGroupHandler, getGroupSubmissionsHandler } from '../controllers/groups.js'; | ||||||
| 
 | 
 | ||||||
| const router = express.Router({ mergeParams: true }); | const router = express.Router({ mergeParams: true }); | ||||||
| 
 | 
 | ||||||
|  | @ -8,9 +8,10 @@ router.get('/', getAllGroupsHandler); | ||||||
| 
 | 
 | ||||||
| router.post('/', createGroupHandler); | router.post('/', createGroupHandler); | ||||||
| 
 | 
 | ||||||
| // Information about a group (members, ... [TODO DOC])
 |  | ||||||
| router.get('/:groupid', getGroupHandler); | router.get('/:groupid', getGroupHandler); | ||||||
| 
 | 
 | ||||||
|  | router.delete('/:groupid', deleteGroupHandler); | ||||||
|  | 
 | ||||||
| router.get('/:groupid/submissions', getGroupSubmissionsHandler); | router.get('/:groupid/submissions', getGroupSubmissionsHandler); | ||||||
| 
 | 
 | ||||||
| export default router; | export default router; | ||||||
|  |  | ||||||
|  | @ -35,6 +35,16 @@ export async function getGroup(classId: string, assignmentNumber: number, groupN | ||||||
|     return mapToGroupDTO(group); |     return mapToGroupDTO(group); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | export async function deleteGroup(classId: string, assignmentNumber: number, groupNumber: number): Promise<GroupDTO> { | ||||||
|  |     const group = await fetchGroup(classId, assignmentNumber, groupNumber); | ||||||
|  |     const assignment = await fetchAssignment(classId, assignmentNumber); | ||||||
|  |      | ||||||
|  |     const groupRepository = getGroupRepository(); | ||||||
|  |     await groupRepository.deleteByAssignmentAndGroupNumber(assignment, groupNumber); | ||||||
|  | 
 | ||||||
|  |     return mapToGroupDTO(group); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| export async function getExistingGroupFromGroupDTO(groupData: GroupDTO) { | export async function getExistingGroupFromGroupDTO(groupData: GroupDTO) { | ||||||
|     const classId = typeof(groupData.class) === 'string' ? groupData.class : groupData.class.id; |     const classId = typeof(groupData.class) === 'string' ? groupData.class : groupData.class.id; | ||||||
|     const assignmentNumber = typeof(groupData.assignment) === 'number' ? groupData.assignment : groupData.assignment.id; |     const assignmentNumber = typeof(groupData.assignment) === 'number' ? groupData.assignment : groupData.assignment.id; | ||||||
|  |  | ||||||
		Reference in a new issue
	
	 Adriaan Jacquet
						Adriaan Jacquet