feat: (broken) POST method voor groep
This commit is contained in:
		
							parent
							
								
									6ad0e990c7
								
							
						
					
					
						commit
						4c76a82178
					
				
					 6 changed files with 81 additions and 7 deletions
				
			
		|  | @ -1,5 +1,6 @@ | |||
| import { Request, Response } from 'express'; | ||||
| import { getAllGroups, getGroup, getGroupSubmissions } from '../services/groups.js'; | ||||
| import { createGroup, getAllGroups, getGroup, getGroupSubmissions } from '../services/groups.js'; | ||||
| import { GroupDTO } from '../interfaces/group.js'; | ||||
| 
 | ||||
| // Typescript is annoywith with parameter forwarding from class.ts
 | ||||
| interface GroupParams { | ||||
|  | @ -54,6 +55,29 @@ export async function getAllGroupsHandler( | |||
|     }); | ||||
| } | ||||
| 
 | ||||
| export async function createGroupHandler( | ||||
|     req: Request, | ||||
|     res: Response, | ||||
| ): Promise<void> { | ||||
|     const classid = req.params.classid; | ||||
|     const assignmentId = +req.params.assignmentid; | ||||
| 
 | ||||
|     if (isNaN(assignmentId)) { | ||||
|         res.status(400).json({ error: 'Assignment id must be a number' }); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     const groupData = req.body as GroupDTO; | ||||
|     const group = createGroup(groupData, classid, assignmentId); | ||||
| 
 | ||||
|     if (!group) { | ||||
|         res.status(500).json({ error: "Something went wrong while creating group" }); | ||||
|         return | ||||
|     } | ||||
| 
 | ||||
|     res.status(201).json({ group: group }); | ||||
| } | ||||
| 
 | ||||
| export async function getGroupSubmissionsHandler( | ||||
|     req: Request, | ||||
|     res: Response, | ||||
|  |  | |||
|  | @ -17,8 +17,8 @@ export class Group { | |||
|     }) | ||||
|     assignment!: Assignment; | ||||
| 
 | ||||
|     @PrimaryKey({ type: 'integer' }) | ||||
|     groupNumber!: number; | ||||
|     @PrimaryKey({ type: 'integer', autoincrement: true }) | ||||
|     groupNumber?: number; | ||||
| 
 | ||||
|     @ManyToMany({ | ||||
|         entity: () => { | ||||
|  |  | |||
|  | @ -11,7 +11,7 @@ export interface GroupDTO { | |||
| export function mapToGroupDTO(group: Group): GroupDTO { | ||||
|     return { | ||||
|         assignment: mapToAssignmentDTO(group.assignment), // ERROR: , group.assignment.within),
 | ||||
|         groupNumber: group.groupNumber, | ||||
|         groupNumber: group.groupNumber!, | ||||
|         members: group.members.map(mapToStudentDTO), | ||||
|     }; | ||||
| } | ||||
|  | @ -19,7 +19,7 @@ export function mapToGroupDTO(group: Group): GroupDTO { | |||
| export function mapToGroupDTOId(group: Group): GroupDTO { | ||||
|     return { | ||||
|         assignment: group.assignment.id!, | ||||
|         groupNumber: group.groupNumber, | ||||
|         groupNumber: group.groupNumber!, | ||||
|         members: group.members.map((member) => { | ||||
|             return member.username; | ||||
|         }), | ||||
|  |  | |||
|  | @ -24,6 +24,6 @@ export function mapToTeacherInvitationDTOIds( | |||
|     return { | ||||
|         sender: invitation.sender.username, | ||||
|         receiver: invitation.receiver.username, | ||||
|         class: invitation.class.classId, | ||||
|         class: invitation.class.classId!, | ||||
|     }; | ||||
| } | ||||
|  |  | |||
|  | @ -1,11 +1,13 @@ | |||
| import express from 'express'; | ||||
| import { getAllGroupsHandler, getGroupHandler, getGroupSubmissionsHandler } from '../controllers/groups.js'; | ||||
| import { createGroupHandler, getAllGroupsHandler, getGroupHandler, getGroupSubmissionsHandler } from '../controllers/groups.js'; | ||||
| 
 | ||||
| const router = express.Router({ mergeParams: true }); | ||||
| 
 | ||||
| // Root endpoint used to search objects
 | ||||
| router.get('/', getAllGroupsHandler); | ||||
| 
 | ||||
| router.post('/', createGroupHandler); | ||||
| 
 | ||||
| // Information about a group (members, ... [TODO DOC])
 | ||||
| router.get('/:groupid', getGroupHandler); | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,9 +1,12 @@ | |||
| import { GroupRepository } from '../data/assignments/group-repository.js'; | ||||
| import { | ||||
|     getAssignmentRepository, | ||||
|     getClassRepository, | ||||
|     getGroupRepository, | ||||
|     getStudentRepository, | ||||
|     getSubmissionRepository, | ||||
| } from '../data/repositories.js'; | ||||
| import { Group } from '../entities/assignments/group.entity.js'; | ||||
| import { | ||||
|     GroupDTO, | ||||
|     mapToGroupDTO, | ||||
|  | @ -51,6 +54,51 @@ export async function getGroup( | |||
|     return mapToGroupDTOId(group); | ||||
| } | ||||
| 
 | ||||
| export async function createGroup( | ||||
|     groupData: GroupDTO, | ||||
|     classid: string, | ||||
|     assignmentNumber: number, | ||||
| ): Promise<Group | null> { | ||||
|     const studentRepository = getStudentRepository(); | ||||
| 
 | ||||
|     const memberUsernames = groupData.members as string[] || []; // TODO check if groupdata.members is a list
 | ||||
|     const members = (await Promise.all([...memberUsernames].map(id => studentRepository.findByUsername(id)))) | ||||
|         .filter(student => student != null); | ||||
| 
 | ||||
|     console.log(members); | ||||
| 
 | ||||
|     const classRepository = getClassRepository(); | ||||
|     const cls = await classRepository.findById(classid); | ||||
| 
 | ||||
|     if (!cls) { | ||||
|         return null; | ||||
|     } | ||||
| 
 | ||||
|     const assignmentRepository = getAssignmentRepository(); | ||||
|     const assignment = await assignmentRepository.findByClassAndId(cls, assignmentNumber); | ||||
| 
 | ||||
|     if (!assignment) { | ||||
|         return null; | ||||
|     } | ||||
| 
 | ||||
|     const groupRepository = getGroupRepository(); | ||||
|     try { | ||||
|         console.log('EEEEE'); | ||||
|         const newGroup = groupRepository.create({ | ||||
|             assignment: assignment, | ||||
|             members: members, | ||||
|         }); | ||||
|         console.log('OOOOOO'); | ||||
|         await groupRepository.save(newGroup); | ||||
|         console.log('AAAAAA'); | ||||
| 
 | ||||
|         return newGroup; | ||||
|     } catch(e) { | ||||
|         console.log(e); | ||||
|         return null; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| export async function getAllGroups( | ||||
|     classId: string, | ||||
|     assignmentNumber: number, | ||||
|  |  | |||
		Reference in a new issue
	
	 Adriaan Jacquet
						Adriaan Jacquet