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,
|
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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
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