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 { 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
|
// Typescript is annoywith with parameter forwarding from class.ts
|
||||||
interface GroupParams {
|
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(
|
export async function getGroupSubmissionsHandler(
|
||||||
req: Request,
|
req: Request,
|
||||||
res: Response,
|
res: Response,
|
||||||
|
|
|
@ -17,8 +17,8 @@ export class Group {
|
||||||
})
|
})
|
||||||
assignment!: Assignment;
|
assignment!: Assignment;
|
||||||
|
|
||||||
@PrimaryKey({ type: 'integer' })
|
@PrimaryKey({ type: 'integer', autoincrement: true })
|
||||||
groupNumber!: number;
|
groupNumber?: number;
|
||||||
|
|
||||||
@ManyToMany({
|
@ManyToMany({
|
||||||
entity: () => {
|
entity: () => {
|
||||||
|
|
|
@ -11,7 +11,7 @@ export interface GroupDTO {
|
||||||
export function mapToGroupDTO(group: Group): GroupDTO {
|
export function mapToGroupDTO(group: Group): GroupDTO {
|
||||||
return {
|
return {
|
||||||
assignment: mapToAssignmentDTO(group.assignment), // ERROR: , group.assignment.within),
|
assignment: mapToAssignmentDTO(group.assignment), // ERROR: , group.assignment.within),
|
||||||
groupNumber: group.groupNumber,
|
groupNumber: group.groupNumber!,
|
||||||
members: group.members.map(mapToStudentDTO),
|
members: group.members.map(mapToStudentDTO),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ export function mapToGroupDTO(group: Group): GroupDTO {
|
||||||
export function mapToGroupDTOId(group: Group): GroupDTO {
|
export function mapToGroupDTOId(group: Group): GroupDTO {
|
||||||
return {
|
return {
|
||||||
assignment: group.assignment.id!,
|
assignment: group.assignment.id!,
|
||||||
groupNumber: group.groupNumber,
|
groupNumber: group.groupNumber!,
|
||||||
members: group.members.map((member) => {
|
members: group.members.map((member) => {
|
||||||
return member.username;
|
return member.username;
|
||||||
}),
|
}),
|
||||||
|
|
|
@ -24,6 +24,6 @@ export function mapToTeacherInvitationDTOIds(
|
||||||
return {
|
return {
|
||||||
sender: invitation.sender.username,
|
sender: invitation.sender.username,
|
||||||
receiver: invitation.receiver.username,
|
receiver: invitation.receiver.username,
|
||||||
class: invitation.class.classId,
|
class: invitation.class.classId!,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
import express from 'express';
|
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 });
|
const router = express.Router({ mergeParams: true });
|
||||||
|
|
||||||
// Root endpoint used to search objects
|
// Root endpoint used to search objects
|
||||||
router.get('/', getAllGroupsHandler);
|
router.get('/', getAllGroupsHandler);
|
||||||
|
|
||||||
|
router.post('/', createGroupHandler);
|
||||||
|
|
||||||
// Information about a group (members, ... [TODO DOC])
|
// Information about a group (members, ... [TODO DOC])
|
||||||
router.get('/:groupid', getGroupHandler);
|
router.get('/:groupid', getGroupHandler);
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
|
import { GroupRepository } from '../data/assignments/group-repository.js';
|
||||||
import {
|
import {
|
||||||
getAssignmentRepository,
|
getAssignmentRepository,
|
||||||
getClassRepository,
|
getClassRepository,
|
||||||
getGroupRepository,
|
getGroupRepository,
|
||||||
|
getStudentRepository,
|
||||||
getSubmissionRepository,
|
getSubmissionRepository,
|
||||||
} from '../data/repositories.js';
|
} from '../data/repositories.js';
|
||||||
|
import { Group } from '../entities/assignments/group.entity.js';
|
||||||
import {
|
import {
|
||||||
GroupDTO,
|
GroupDTO,
|
||||||
mapToGroupDTO,
|
mapToGroupDTO,
|
||||||
|
@ -51,6 +54,51 @@ export async function getGroup(
|
||||||
return mapToGroupDTOId(group);
|
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(
|
export async function getAllGroups(
|
||||||
classId: string,
|
classId: string,
|
||||||
assignmentNumber: number,
|
assignmentNumber: number,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue