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