95 lines
3.1 KiB
TypeScript
95 lines
3.1 KiB
TypeScript
import { Request, Response } from 'express';
|
|
import {
|
|
createAssignment,
|
|
deleteAssignment,
|
|
getAllAssignments,
|
|
getAssignment,
|
|
getAssignmentsSubmissions,
|
|
putAssignment,
|
|
} from '../services/assignments.js';
|
|
import { AssignmentDTO } from '@dwengo-1/common/interfaces/assignment';
|
|
import { requireFields } from './error-helper.js';
|
|
import { BadRequestException } from '../exceptions/bad-request-exception.js';
|
|
import { Assignment } from '../entities/assignments/assignment.entity.js';
|
|
import { EntityDTO } from '@mikro-orm/core';
|
|
|
|
export async function getAllAssignmentsHandler(req: Request, res: Response): Promise<void> {
|
|
const classId = req.params.classid;
|
|
const full = req.query.full === 'true';
|
|
|
|
const assignments = await getAllAssignments(classId, full);
|
|
|
|
res.json({ assignments });
|
|
}
|
|
|
|
export async function createAssignmentHandler(req: Request, res: Response): Promise<void> {
|
|
const classid = req.params.classid;
|
|
const description = req.body.description;
|
|
const language = req.body.language;
|
|
const learningPath = req.body.learningPath;
|
|
const title = req.body.title;
|
|
|
|
requireFields({ description, language, learningPath, title });
|
|
|
|
const assignmentData = req.body as AssignmentDTO;
|
|
const assignment = await createAssignment(classid, assignmentData);
|
|
|
|
res.json({ assignment });
|
|
}
|
|
|
|
export async function getAssignmentHandler(req: Request, res: Response): Promise<void> {
|
|
const id = Number(req.params.id);
|
|
const classid = req.params.classid;
|
|
requireFields({ id, classid });
|
|
|
|
if (isNaN(id)) {
|
|
throw new BadRequestException('Assignment id should be a number');
|
|
}
|
|
|
|
const assignment = await getAssignment(classid, id);
|
|
|
|
res.json({ assignment });
|
|
}
|
|
|
|
export async function putAssignmentHandler(req: Request, res: Response): Promise<void> {
|
|
const id = Number(req.params.id);
|
|
const classid = req.params.classid;
|
|
requireFields({ id, classid });
|
|
|
|
if (isNaN(id)) {
|
|
throw new BadRequestException('Assignment id should be a number');
|
|
}
|
|
|
|
const assignmentData = req.body as Partial<EntityDTO<Assignment>>;
|
|
const assignment = await putAssignment(classid, id, assignmentData);
|
|
|
|
res.json({ assignment });
|
|
}
|
|
|
|
export async function deleteAssignmentHandler(req: Request, res: Response): Promise<void> {
|
|
const id = Number(req.params.id);
|
|
const classid = req.params.classid;
|
|
requireFields({ id, classid });
|
|
|
|
if (isNaN(id)) {
|
|
throw new BadRequestException('Assignment id should be a number');
|
|
}
|
|
|
|
const assignment = await deleteAssignment(classid, id);
|
|
res.json({ assignment });
|
|
}
|
|
|
|
export async function getAssignmentsSubmissionsHandler(req: Request, res: Response): Promise<void> {
|
|
const classid = req.params.classid;
|
|
const assignmentNumber = Number(req.params.id);
|
|
const full = req.query.full === 'true';
|
|
requireFields({ assignmentNumber, classid });
|
|
|
|
if (isNaN(assignmentNumber)) {
|
|
throw new BadRequestException('Assignment id should be a number');
|
|
}
|
|
|
|
const submissions = await getAssignmentsSubmissions(classid, assignmentNumber, full);
|
|
|
|
res.json({ submissions });
|
|
}
|