feat: submission endpoint geimplementeerd (ongetest)
This commit is contained in:
parent
b3299949b0
commit
7c453467df
5 changed files with 85 additions and 10 deletions
25
backend/src/controllers/submissions.ts
Normal file
25
backend/src/controllers/submissions.ts
Normal 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);
|
||||
}
|
30
backend/src/interfaces/submission.ts
Normal file
30
backend/src/interfaces/submission.ts
Normal 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,
|
||||
}
|
||||
}
|
|
@ -4,6 +4,8 @@ import {
|
|||
getLearningObject,
|
||||
} from '../controllers/learning-objects.js';
|
||||
|
||||
import submissionRoutes from './submissions.js';
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
// DWENGO learning objects
|
||||
|
@ -24,4 +26,6 @@ router.get('/', getAllLearningObjects);
|
|||
// Example: http://localhost:3000/learningObject/un_ai7
|
||||
router.get('/:hruid', getLearningObject);
|
||||
|
||||
router.use('/:hruid/submissions', submissionRoutes);
|
||||
|
||||
export default router;
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
import express from 'express';
|
||||
import { getSubmissionHandler } from '../controllers/submissions';
|
||||
const router = express.Router();
|
||||
|
||||
|
||||
|
||||
// Root endpoint used to search objects
|
||||
router.get('/', (req, res) => {
|
||||
res.json({
|
||||
|
@ -9,15 +12,6 @@ router.get('/', (req, res) => {
|
|||
});
|
||||
|
||||
// Information about an submission with id 'id'
|
||||
router.get('/:id', (req, res) => {
|
||||
res.json({
|
||||
id: req.params.id,
|
||||
student: '0',
|
||||
group: '0',
|
||||
time: new Date(2025, 1, 1),
|
||||
content: 'Wortel 2 is rationeel',
|
||||
learningObject: '0',
|
||||
});
|
||||
});
|
||||
router.get('/:id', getSubmissionHandler);
|
||||
|
||||
export default router;
|
||||
|
|
22
backend/src/services/submissions.ts
Normal file
22
backend/src/services/submissions.ts
Normal 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);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue