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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue