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 { getSubmission } from "../services/submissions.js";
|
||||
import {createSubmission, deleteSubmission, getSubmission} from "../services/submissions.js";
|
||||
import { Language, languageMap } from "../entities/content/language.js";
|
||||
import {SubmissionDTO} from "../interfaces/submission";
|
||||
|
||||
interface SubmissionParams {
|
||||
lohruid: string,
|
||||
submissionNumber: number;
|
||||
hruid: string,
|
||||
id: number;
|
||||
}
|
||||
|
||||
export async function getSubmissionHandler(
|
||||
req: Request<SubmissionParams>,
|
||||
res: Response,
|
||||
): Promise<void> {
|
||||
const lohruid = req.params.lohruid;
|
||||
const submissionNumber = +req.params.submissionNumber;
|
||||
const lohruid = req.params.hruid;
|
||||
const submissionNumber = +req.params.id;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
let lang = languageMap[req.query.language as string] || Language.Dutch;
|
||||
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) {
|
||||
res.status(404).json({ error: 'Submission not found' });
|
||||
|
@ -31,3 +32,29 @@ export async function getSubmissionHandler(
|
|||
|
||||
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 { Language } from "../entities/content/language.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 {
|
||||
learningObjectHruid: string,
|
||||
learningObjectLanguage: Language,
|
||||
learningObjectVersion: string,
|
||||
|
||||
submissionNumber: number,
|
||||
submitter: StudentDTO | string,
|
||||
time: Date,
|
||||
group?: GroupDTO | string,
|
||||
submissionNumber?: number,
|
||||
submitter: StudentDTO,
|
||||
time?: Date,
|
||||
group?: GroupDTO,
|
||||
content: string,
|
||||
}
|
||||
|
||||
|
@ -28,3 +30,18 @@ export function mapToSubmissionDTO(submission: Submission): SubmissionDTO {
|
|||
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 {
|
||||
sender: invitation.sender.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);
|
||||
|
||||
// The list of questions a group has made
|
||||
router.get('/:id/question', (req, res) => {
|
||||
router.get('/:id/questions', (req, res) => {
|
||||
res.json({
|
||||
questions: ['0'],
|
||||
});
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import express from 'express';
|
||||
import { getSubmissionHandler } from '../controllers/submissions.js';
|
||||
import {createSubmissionHandler, deleteSubmissionHandler, getSubmissionHandler} from '../controllers/submissions.js';
|
||||
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'
|
||||
router.get('/:id', getSubmissionHandler);
|
||||
|
||||
router.delete('/:id', deleteSubmissionHandler);
|
||||
|
||||
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 { 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(
|
||||
learningObjectHruid: string,
|
||||
|
@ -20,3 +20,38 @@ export async function getSubmission(
|
|||
|
||||
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