feat: submission route post delete
This commit is contained in:
parent
911e17771f
commit
d9eb8def72
6 changed files with 100 additions and 17 deletions
|
@ -1,28 +1,29 @@
|
||||||
import { Request, Response } from "express";
|
import { Request, Response } from "express";
|
||||||
import { getSubmission } from "../services/submissions.js";
|
import {createSubmission, deleteSubmission, getSubmission} from "../services/submissions.js";
|
||||||
import { Language, languageMap } from "../entities/content/language.js";
|
import { Language, languageMap } from "../entities/content/language.js";
|
||||||
|
import {SubmissionDTO} from "../interfaces/submission";
|
||||||
|
|
||||||
interface SubmissionParams {
|
interface SubmissionParams {
|
||||||
lohruid: string,
|
hruid: string,
|
||||||
submissionNumber: number;
|
id: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getSubmissionHandler(
|
export async function getSubmissionHandler(
|
||||||
req: Request<SubmissionParams>,
|
req: Request<SubmissionParams>,
|
||||||
res: Response,
|
res: Response,
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
const lohruid = req.params.lohruid;
|
const lohruid = req.params.hruid;
|
||||||
const submissionNumber = +req.params.submissionNumber;
|
const submissionNumber = +req.params.id;
|
||||||
|
|
||||||
if (isNaN(submissionNumber)) {
|
if (isNaN(submissionNumber)) {
|
||||||
res.status(404).json({ error: 'Submission number is not a number' });
|
res.status(400).json({ error: 'Submission number is not a number' });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let lang = languageMap[req.query.language as string] || Language.Dutch;
|
let lang = languageMap[req.query.language as string] || Language.Dutch;
|
||||||
let version = req.query.version as string || '1';
|
let version = req.query.version as string || '1';
|
||||||
|
|
||||||
const submission = getSubmission(lohruid, lang, version, submissionNumber);
|
const submission = await getSubmission(lohruid, lang, version, submissionNumber);
|
||||||
|
|
||||||
if (!submission) {
|
if (!submission) {
|
||||||
res.status(404).json({ error: 'Submission not found' });
|
res.status(404).json({ error: 'Submission not found' });
|
||||||
|
@ -31,3 +32,29 @@ export async function getSubmissionHandler(
|
||||||
|
|
||||||
res.json(submission);
|
res.json(submission);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function createSubmissionHandler(req: Request, res: Response){
|
||||||
|
const submissionDTO = req.body as SubmissionDTO;
|
||||||
|
|
||||||
|
const submission = await createSubmission(submissionDTO);
|
||||||
|
|
||||||
|
if (!submission)
|
||||||
|
res.status(404).json({ error: 'Submission not added' });
|
||||||
|
else
|
||||||
|
res.json(submission)
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function deleteSubmissionHandler(req: Request, res: Response){
|
||||||
|
const hruid = req.params.hruid;
|
||||||
|
const submissionNumber = +req.params.id;
|
||||||
|
|
||||||
|
let lang = languageMap[req.query.language as string] || Language.Dutch;
|
||||||
|
let version = req.query.version as string || '1';
|
||||||
|
|
||||||
|
const submission = await deleteSubmission(hruid, lang, version, submissionNumber);
|
||||||
|
|
||||||
|
if (!submission)
|
||||||
|
res.status(404).json({ error: 'Submission not found' });
|
||||||
|
else
|
||||||
|
res.json(submission)
|
||||||
|
}
|
||||||
|
|
|
@ -1,17 +1,19 @@
|
||||||
import { Submission } from "../entities/assignments/submission.entity.js";
|
import { Submission } from "../entities/assignments/submission.entity.js";
|
||||||
import { Language } from "../entities/content/language.js";
|
import { Language } from "../entities/content/language.js";
|
||||||
import { GroupDTO, mapToGroupDTO } from "./group.js";
|
import { GroupDTO, mapToGroupDTO } from "./group.js";
|
||||||
import { mapToStudentDTO, StudentDTO } from "./student.js";
|
import {mapToStudent, mapToStudentDTO, StudentDTO} from "./student.js";
|
||||||
|
import {mapToUser} from "./user";
|
||||||
|
import {Student} from "../entities/users/student.entity";
|
||||||
|
|
||||||
export interface SubmissionDTO {
|
export interface SubmissionDTO {
|
||||||
learningObjectHruid: string,
|
learningObjectHruid: string,
|
||||||
learningObjectLanguage: Language,
|
learningObjectLanguage: Language,
|
||||||
learningObjectVersion: string,
|
learningObjectVersion: string,
|
||||||
|
|
||||||
submissionNumber: number,
|
submissionNumber?: number,
|
||||||
submitter: StudentDTO | string,
|
submitter: StudentDTO,
|
||||||
time: Date,
|
time?: Date,
|
||||||
group?: GroupDTO | string,
|
group?: GroupDTO,
|
||||||
content: string,
|
content: string,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,3 +30,18 @@ export function mapToSubmissionDTO(submission: Submission): SubmissionDTO {
|
||||||
content: submission.content,
|
content: submission.content,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function mapToSubmission(submissionDTO: SubmissionDTO): Submission {
|
||||||
|
const submission = new Submission();
|
||||||
|
submission.learningObjectHruid = submissionDTO.learningObjectHruid;
|
||||||
|
submission.learningObjectLanguage = submissionDTO.learningObjectLanguage;
|
||||||
|
submission.learningObjectVersion = submissionDTO.learningObjectVersion;
|
||||||
|
// submission.submissionNumber = submissionDTO.submissionNumber;
|
||||||
|
submission.submitter = mapToStudent(submissionDTO.submitter) ;
|
||||||
|
// submission.submissionTime = submissionDTO.time;
|
||||||
|
// submission.onBehalfOf = submissionDTO.group!;
|
||||||
|
// TODO fix group
|
||||||
|
submission.content = submissionDTO.content;
|
||||||
|
|
||||||
|
return submission;
|
||||||
|
}
|
||||||
|
|
|
@ -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!,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@ router.get('/:groupid', getGroupHandler);
|
||||||
router.get('/:groupid', getGroupSubmissionsHandler);
|
router.get('/:groupid', getGroupSubmissionsHandler);
|
||||||
|
|
||||||
// The list of questions a group has made
|
// The list of questions a group has made
|
||||||
router.get('/:id/question', (req, res) => {
|
router.get('/:id/questions', (req, res) => {
|
||||||
res.json({
|
res.json({
|
||||||
questions: ['0'],
|
questions: ['0'],
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import express from 'express';
|
import express from 'express';
|
||||||
import { getSubmissionHandler } from '../controllers/submissions.js';
|
import {createSubmissionHandler, deleteSubmissionHandler, getSubmissionHandler} from '../controllers/submissions.js';
|
||||||
const router = express.Router({ mergeParams: true });
|
const router = express.Router({ mergeParams: true });
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,7 +11,11 @@ router.get('/', (req, res) => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
router.post('/:id', createSubmissionHandler);
|
||||||
|
|
||||||
// Information about an submission with id 'id'
|
// Information about an submission with id 'id'
|
||||||
router.get('/:id', getSubmissionHandler);
|
router.get('/:id', getSubmissionHandler);
|
||||||
|
|
||||||
|
router.delete('/:id', deleteSubmissionHandler);
|
||||||
|
|
||||||
export default router;
|
export default router;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { getSubmissionRepository } from "../data/repositories.js";
|
import {getGroupRepository, getSubmissionRepository} from "../data/repositories.js";
|
||||||
import { Language } from "../entities/content/language.js";
|
import { Language } from "../entities/content/language.js";
|
||||||
import { LearningObjectIdentifier } from "../entities/content/learning-object-identifier.js";
|
import { LearningObjectIdentifier } from "../entities/content/learning-object-identifier.js";
|
||||||
import { mapToSubmissionDTO, SubmissionDTO } from "../interfaces/submission.js";
|
import {mapToSubmission, mapToSubmissionDTO, SubmissionDTO} from "../interfaces/submission.js";
|
||||||
|
|
||||||
export async function getSubmission(
|
export async function getSubmission(
|
||||||
learningObjectHruid: string,
|
learningObjectHruid: string,
|
||||||
|
@ -20,3 +20,38 @@ export async function getSubmission(
|
||||||
|
|
||||||
return mapToSubmissionDTO(submission);
|
return mapToSubmissionDTO(submission);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function createSubmission(submissionDTO: SubmissionDTO) {
|
||||||
|
const submissionRepository = getSubmissionRepository();
|
||||||
|
const submission = mapToSubmission(submissionDTO);
|
||||||
|
|
||||||
|
try {
|
||||||
|
const newSubmission = await submissionRepository.create(submission);
|
||||||
|
await submissionRepository.save(newSubmission);
|
||||||
|
} catch (e) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
return submission;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function deleteSubmission(
|
||||||
|
learningObjectHruid: string,
|
||||||
|
language: Language,
|
||||||
|
version: string,
|
||||||
|
submissionNumber: number
|
||||||
|
) {
|
||||||
|
const submissionRepository = getSubmissionRepository();
|
||||||
|
|
||||||
|
const submission = getSubmission(learningObjectHruid, language, version, submissionNumber);
|
||||||
|
|
||||||
|
if (!submission)
|
||||||
|
return null
|
||||||
|
|
||||||
|
const loId = new LearningObjectIdentifier(learningObjectHruid, language, version);
|
||||||
|
await submissionRepository.deleteSubmissionByLearningObjectAndSubmissionNumber(loId, submissionNumber);
|
||||||
|
|
||||||
|
return submission;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue