diff --git a/backend/src/controllers/groups.ts b/backend/src/controllers/groups.ts index b5f32d37..781cd4fd 100644 --- a/backend/src/controllers/groups.ts +++ b/backend/src/controllers/groups.ts @@ -1,14 +1,11 @@ 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 { requireFields } from './error-helper.js'; import { BadRequestException } from '../exceptions/bad-request-exception.js'; import { getLogger } from '../logging/initalize.js'; -export async function getGroupHandler(req: Request, res: Response): Promise { - const classId = req.params.classid; - const assignmentId = parseInt(req.params.assignmentid); - const groupId = parseInt(req.params.groupid); +function checkGroupFields(classId: any, assignmentId: any, groupId: any) { requireFields({ classId, assignmentId, groupId }); if (isNaN(assignmentId)) { @@ -18,13 +15,26 @@ export async function getGroupHandler(req: Request, res: Response): Promise { + 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); - if (!group) { - res.status(404).json({ error: 'Group not found' }); - return; - } + res.json({ group }); +} + +export async function deleteGroupHandler(req: Request, res: Response): Promise { + 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 }); } diff --git a/backend/src/routes/groups.ts b/backend/src/routes/groups.ts index 81532a90..4a7d6b10 100644 --- a/backend/src/routes/groups.ts +++ b/backend/src/routes/groups.ts @@ -1,5 +1,5 @@ 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 }); @@ -8,9 +8,10 @@ router.get('/', getAllGroupsHandler); router.post('/', createGroupHandler); -// Information about a group (members, ... [TODO DOC]) router.get('/:groupid', getGroupHandler); +router.delete('/:groupid', deleteGroupHandler); + router.get('/:groupid/submissions', getGroupSubmissionsHandler); export default router; diff --git a/backend/src/services/groups.ts b/backend/src/services/groups.ts index 94f96d54..68784177 100644 --- a/backend/src/services/groups.ts +++ b/backend/src/services/groups.ts @@ -35,6 +35,16 @@ export async function getGroup(classId: string, assignmentNumber: number, groupN return mapToGroupDTO(group); } +export async function deleteGroup(classId: string, assignmentNumber: number, groupNumber: number): Promise { + 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) { const classId = typeof(groupData.class) === 'string' ? groupData.class : groupData.class.id; const assignmentNumber = typeof(groupData.assignment) === 'number' ? groupData.assignment : groupData.assignment.id;