feat: PUT op group geimplementeerd
This commit is contained in:
		
							parent
							
								
									4e6f7ccb3d
								
							
						
					
					
						commit
						33f785ebc0
					
				
					 6 changed files with 39 additions and 10 deletions
				
			
		|  | @ -1,9 +1,11 @@ | ||||||
| import { Request, Response } from 'express'; | import { Request, Response } from 'express'; | ||||||
| import { createGroup, deleteGroup, getAllGroups, getGroup, getGroupSubmissions } from '../services/groups.js'; | import { createGroup, deleteGroup, getAllGroups, getGroup, getGroupSubmissions, putGroup } 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'; | ||||||
|  | import { EntityDTO } from '@mikro-orm/core'; | ||||||
|  | import { Group } from '../entities/assignments/group.entity.js'; | ||||||
| 
 | 
 | ||||||
| function checkGroupFields(classId: any, assignmentId: any, groupId: any) { | function checkGroupFields(classId: any, assignmentId: any, groupId: any) { | ||||||
|     requireFields({ classId, assignmentId, groupId }); |     requireFields({ classId, assignmentId, groupId }); | ||||||
|  | @ -28,6 +30,17 @@ export async function getGroupHandler(req: Request, res: Response): Promise<void | ||||||
|     res.json({ group }); |     res.json({ group }); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | export async function putGroupHandler(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 putGroup(classId, assignmentId, groupId, req.body as Partial<EntityDTO<Group>>); | ||||||
|  | 
 | ||||||
|  |     res.json({ group }); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| export async function deleteGroupHandler(req: Request, res: Response): Promise<void> { | export async function deleteGroupHandler(req: Request, res: Response): Promise<void> { | ||||||
|     const classId = req.params.classid; |     const classId = req.params.classid; | ||||||
|     const assignmentId = parseInt(req.params.assignmentid); |     const assignmentId = parseInt(req.params.assignmentid); | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| import express from 'express'; | import express from 'express'; | ||||||
| import { createGroupHandler, deleteGroupHandler, getAllGroupsHandler, getGroupHandler, getGroupSubmissionsHandler } from '../controllers/groups.js'; | import { createGroupHandler, deleteGroupHandler, getAllGroupsHandler, getGroupHandler, getGroupSubmissionsHandler, putGroupHandler } from '../controllers/groups.js'; | ||||||
| 
 | 
 | ||||||
| const router = express.Router({ mergeParams: true }); | const router = express.Router({ mergeParams: true }); | ||||||
| 
 | 
 | ||||||
|  | @ -10,6 +10,8 @@ router.post('/', createGroupHandler); | ||||||
| 
 | 
 | ||||||
| router.get('/:groupid', getGroupHandler); | router.get('/:groupid', getGroupHandler); | ||||||
| 
 | 
 | ||||||
|  | router.put('/:groupid', putGroupHandler); | ||||||
|  | 
 | ||||||
| router.delete('/:groupid', deleteGroupHandler); | router.delete('/:groupid', deleteGroupHandler); | ||||||
| 
 | 
 | ||||||
| router.get('/:groupid/submissions', getGroupSubmissionsHandler); | router.get('/:groupid/submissions', getGroupSubmissionsHandler); | ||||||
|  |  | ||||||
|  | @ -64,7 +64,7 @@ export async function getAssignment(classid: string, id: number): Promise<Assign | ||||||
| export async function putAssignment(classid: string, id: number, assignmentData: Partial<EntityDTO<Assignment>>): Promise<AssignmentDTO> { | export async function putAssignment(classid: string, id: number, assignmentData: Partial<EntityDTO<Assignment>>): Promise<AssignmentDTO> { | ||||||
|     const assignment = await fetchAssignment(classid, id); |     const assignment = await fetchAssignment(classid, id); | ||||||
|      |      | ||||||
|     await putObject<Assignment, AssignmentDTO>(assignment, assignmentData, getAssignmentRepository()); |     await putObject<Assignment>(assignment, assignmentData, getAssignmentRepository()); | ||||||
| 
 | 
 | ||||||
|     return mapToAssignmentDTO(assignment); |     return mapToAssignmentDTO(assignment); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -62,7 +62,7 @@ export async function createClass(classData: ClassDTO): Promise<ClassDTO> { | ||||||
| export async function putClass(classId: string, classData: Partial<EntityDTO<Class>>): Promise<ClassDTO> { | export async function putClass(classId: string, classData: Partial<EntityDTO<Class>>): Promise<ClassDTO> { | ||||||
|     const cls = await fetchClass(classId); |     const cls = await fetchClass(classId); | ||||||
| 
 | 
 | ||||||
|     await putObject<Class, ClassDTO>(cls, classData, getClassRepository()); |     await putObject<Class>(cls, classData, getClassRepository()); | ||||||
| 
 | 
 | ||||||
|     return mapToClassDTO(cls); |     return mapToClassDTO(cls); | ||||||
| } | } | ||||||
|  | @ -116,7 +116,7 @@ export async function deleteClassStudent(classId: string, username: string): Pro | ||||||
|     const cls = await fetchClass(classId); |     const cls = await fetchClass(classId); | ||||||
|      |      | ||||||
|     const newStudents = { students: cls.students.filter((student) => student.username !== username) }; |     const newStudents = { students: cls.students.filter((student) => student.username !== username) }; | ||||||
|     await putObject<Class, ClassDTO>(cls, newStudents, getClassRepository()); |     await putObject<Class>(cls, newStudents, getClassRepository()); | ||||||
| 
 | 
 | ||||||
|     return mapToClassDTO(cls); |     return mapToClassDTO(cls); | ||||||
| } | } | ||||||
|  | @ -125,7 +125,7 @@ export async function deleteClassTeacher(classId: string, username: string): Pro | ||||||
|     const cls = await fetchClass(classId); |     const cls = await fetchClass(classId); | ||||||
|      |      | ||||||
|     const newTeachers = { teachers: cls.teachers.filter((teacher) => teacher.username !== username) }; |     const newTeachers = { teachers: cls.teachers.filter((teacher) => teacher.username !== username) }; | ||||||
|     await putObject<Class, ClassDTO>(cls, newTeachers, getClassRepository()); |     await putObject<Class>(cls, newTeachers, getClassRepository()); | ||||||
| 
 | 
 | ||||||
|     return mapToClassDTO(cls); |     return mapToClassDTO(cls); | ||||||
| } | } | ||||||
|  | @ -135,7 +135,7 @@ export async function addClassStudent(classId: string, username: string): Promis | ||||||
|     const newStudent = await fetchStudent(username); |     const newStudent = await fetchStudent(username); | ||||||
| 
 | 
 | ||||||
|     const newStudents = { students: [...cls.students, newStudent] } |     const newStudents = { students: [...cls.students, newStudent] } | ||||||
|     await putObject<Class, ClassDTO>(cls, newStudents, getClassRepository()); |     await putObject<Class>(cls, newStudents, getClassRepository()); | ||||||
|      |      | ||||||
|     return mapToClassDTO(cls); |     return mapToClassDTO(cls); | ||||||
| } | } | ||||||
|  | @ -145,7 +145,7 @@ export async function addClassTeacher(classId: string, username: string): Promis | ||||||
|     const newTeacher = await fetchTeacher(username); |     const newTeacher = await fetchTeacher(username); | ||||||
| 
 | 
 | ||||||
|     const newTeachers = { teachers: [...cls.teachers, newTeacher] }; |     const newTeachers = { teachers: [...cls.teachers, newTeacher] }; | ||||||
|     await putObject<Class, ClassDTO>(cls, newTeachers, getClassRepository());     |     await putObject<Class>(cls, newTeachers, getClassRepository());     | ||||||
| 
 | 
 | ||||||
|     return mapToClassDTO(cls); |     return mapToClassDTO(cls); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| import { assign } from '@mikro-orm/core'; | import { assign, EntityDTO } from '@mikro-orm/core'; | ||||||
| import { | import { | ||||||
|     getAssignmentRepository, |     getAssignmentRepository, | ||||||
|     getClassRepository, |     getClassRepository, | ||||||
|  | @ -16,6 +16,7 @@ import { getLogger } from '../logging/initalize.js'; | ||||||
| import { fetchAssignment } from './assignments.js'; | import { fetchAssignment } from './assignments.js'; | ||||||
| import { NotFoundException } from '../exceptions/not-found-exception.js'; | import { NotFoundException } from '../exceptions/not-found-exception.js'; | ||||||
| import { fetchClass } from './classes.js'; | import { fetchClass } from './classes.js'; | ||||||
|  | import { putObject } from './service-helper.js'; | ||||||
| 
 | 
 | ||||||
| export async function fetchGroup(classId: string, assignmentNumber: number, groupNumber: number): Promise<Group> { | export async function fetchGroup(classId: string, assignmentNumber: number, groupNumber: number): Promise<Group> { | ||||||
|     const assignment = await fetchAssignment(classId, assignmentNumber); |     const assignment = await fetchAssignment(classId, assignmentNumber); | ||||||
|  | @ -35,6 +36,19 @@ export async function getGroup(classId: string, assignmentNumber: number, groupN | ||||||
|     return mapToGroupDTO(group); |     return mapToGroupDTO(group); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | export async function putGroup( | ||||||
|  |     classId: string,  | ||||||
|  |     assignmentNumber: number,  | ||||||
|  |     groupNumber: number,  | ||||||
|  |     groupData: Partial<EntityDTO<Group>> | ||||||
|  | ): Promise<GroupDTO> { | ||||||
|  |     const group = await fetchGroup(classId, assignmentNumber, groupNumber); | ||||||
|  | 
 | ||||||
|  |     await putObject<Group>(group, groupData, getGroupRepository()); | ||||||
|  | 
 | ||||||
|  |     return mapToGroupDTO(group); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| export async function deleteGroup(classId: string, assignmentNumber: number, groupNumber: number): Promise<GroupDTO> { | export async function deleteGroup(classId: string, assignmentNumber: number, groupNumber: number): Promise<GroupDTO> { | ||||||
|     const group = await fetchGroup(classId, assignmentNumber, groupNumber); |     const group = await fetchGroup(classId, assignmentNumber, groupNumber); | ||||||
|     const assignment = await fetchAssignment(classId, assignmentNumber); |     const assignment = await fetchAssignment(classId, assignmentNumber); | ||||||
|  |  | ||||||
|  | @ -10,7 +10,7 @@ import { DwengoEntityRepository } from "../data/dwengo-entity-repository"; | ||||||
|  *  |  *  | ||||||
|  * @returns Nothing. |  * @returns Nothing. | ||||||
|  */ |  */ | ||||||
| export async function putObject<T extends Object, DTO>( | export async function putObject<T extends Object>( | ||||||
|     object: T,  |     object: T,  | ||||||
|     data: Partial<EntityDTO<FromEntityType<T>>>,  |     data: Partial<EntityDTO<FromEntityType<T>>>,  | ||||||
|     repo: DwengoEntityRepository<T> |     repo: DwengoEntityRepository<T> | ||||||
|  |  | ||||||
		Reference in a new issue
	
	 Adriaan Jacquet
						Adriaan Jacquet