feat: submission endpoint geimplementeerd (ongetest)

This commit is contained in:
Adriaan Jacquet 2025-03-11 18:04:27 +01:00
parent b3299949b0
commit 7c453467df
5 changed files with 85 additions and 10 deletions

View file

@ -0,0 +1,25 @@
import { Request, Response } from "express";
import { getSubmission } from "../services/submissions";
import { Language } from "../entities/content/language";
interface SubmissionParams {
lohruid: string,
submissionNumber: number;
}
export async function getSubmissionHandler(
req: Request<SubmissionParams>,
res: Response,
): Promise<void> {
const lohruid = req.params.lohruid;
const submissionNumber = req.params.submissionNumber;
const submission = getSubmission(lohruid, Language.Dutch, '1', submissionNumber);
if (!submission) {
res.status(404).json({ error: 'Submission not found' });
return;
}
res.json(submission);
}

View file

@ -0,0 +1,30 @@
import { Submission } from "../entities/assignments/submission.entity";
import { Language } from "../entities/content/language";
import { GroupDTO, mapToGroupDTO } from "./group";
import { mapToStudentDTO, StudentDTO } from "./student";
export interface SubmissionDTO {
learningObjectHruid: string,
learningObjectLanguage: Language,
learningObjectVersion: string,
submissionNumber: number,
submitter: StudentDTO | string,
time: Date,
group?: GroupDTO | string,
content: string,
}
export function mapToSubmissionDTO(submission: Submission): SubmissionDTO {
return {
learningObjectHruid: submission.learningObjectHruid,
learningObjectLanguage: submission.learningObjectLanguage,
learningObjectVersion: submission.learningObjectVersion,
submissionNumber: submission.submissionNumber,
submitter: mapToStudentDTO(submission.submitter),
time: submission.submissionTime,
group: submission.onBehalfOf ? mapToGroupDTO(submission.onBehalfOf) : undefined,
content: submission.content,
}
}

View file

@ -4,6 +4,8 @@ import {
getLearningObject, getLearningObject,
} from '../controllers/learning-objects.js'; } from '../controllers/learning-objects.js';
import submissionRoutes from './submissions.js';
const router = express.Router(); const router = express.Router();
// DWENGO learning objects // DWENGO learning objects
@ -24,4 +26,6 @@ router.get('/', getAllLearningObjects);
// Example: http://localhost:3000/learningObject/un_ai7 // Example: http://localhost:3000/learningObject/un_ai7
router.get('/:hruid', getLearningObject); router.get('/:hruid', getLearningObject);
router.use('/:hruid/submissions', submissionRoutes);
export default router; export default router;

View file

@ -1,6 +1,9 @@
import express from 'express'; import express from 'express';
import { getSubmissionHandler } from '../controllers/submissions';
const router = express.Router(); const router = express.Router();
// Root endpoint used to search objects // Root endpoint used to search objects
router.get('/', (req, res) => { router.get('/', (req, res) => {
res.json({ res.json({
@ -9,15 +12,6 @@ router.get('/', (req, res) => {
}); });
// Information about an submission with id 'id' // Information about an submission with id 'id'
router.get('/:id', (req, res) => { router.get('/:id', getSubmissionHandler);
res.json({
id: req.params.id,
student: '0',
group: '0',
time: new Date(2025, 1, 1),
content: 'Wortel 2 is rationeel',
learningObject: '0',
});
});
export default router; export default router;

View file

@ -0,0 +1,22 @@
import { getSubmissionRepository } from "../data/repositories";
import { Language } from "../entities/content/language";
import { LearningObjectIdentifier } from "../entities/content/learning-object-identifier";
import { mapToSubmissionDTO, SubmissionDTO } from "../interfaces/submission";
export async function getSubmission(
learningObjectHruid: string,
language: Language,
version: string,
submissionNumber: number,
): Promise<SubmissionDTO | null> {
const loId = new LearningObjectIdentifier(learningObjectHruid, language, version);
const submissionRepository = getSubmissionRepository();
const submission = await submissionRepository.findSubmissionByLearningObjectAndSubmissionNumber(loId, submissionNumber);
if (!submission) {
return null;
}
return mapToSubmissionDTO(submission);
}