From 7b7934898596639190b617b3e1d6246377eef1e4 Mon Sep 17 00:00:00 2001 From: Gerald Schmittinger Date: Mon, 7 Apr 2025 14:50:15 +0200 Subject: [PATCH] fix(backend): group toch niet deel van primaire sleutel van vragen en submissions gemaakt, maar verplicht veld --- backend/src/controllers/questions.ts | 15 ++++++--------- .../src/entities/assignments/submission.entity.ts | 3 +-- backend/src/entities/questions/question.entity.ts | 2 +- backend/src/interfaces/question.ts | 1 - backend/src/interfaces/submission.ts | 1 - backend/src/routes/questions.ts | 6 +++--- backend/tests/setup-tests.ts | 2 +- .../assignments/submission.testdata.ts | 3 +++ .../test_assets/questions/questions.testdata.ts | 7 ++++++- common/src/interfaces/question.ts | 1 - 10 files changed, 21 insertions(+), 20 deletions(-) diff --git a/backend/src/controllers/questions.ts b/backend/src/controllers/questions.ts index 0cfddd9b..54b50fa9 100644 --- a/backend/src/controllers/questions.ts +++ b/backend/src/controllers/questions.ts @@ -4,7 +4,6 @@ import { FALLBACK_LANG, FALLBACK_SEQ_NUM } from '../config.js'; import { LearningObjectIdentifier } from '../entities/content/learning-object-identifier.js'; import { QuestionDTO, QuestionId } from '@dwengo-1/common/interfaces/question'; import { Language } from '@dwengo-1/common/util/language'; -import {getGroup} from "../services/groups"; function getObjectId(req: Request, res: Response): LearningObjectIdentifier | null { const { hruid, version } = req.params; @@ -22,18 +21,16 @@ function getObjectId(req: Request, res: Response): LearningObjectIdentifier | nu }; } -async function getQuestionId(req: Request, res: Response): Promise { - const { seq, classId, assignmentId, groupId } = req.params +function getQuestionId(req: Request, res: Response): QuestionId | null { + const seq = req.params.seq; const learningObjectIdentifier = getObjectId(req, res); - const groupIdentifier = await getGroup(classId, parseInt(assignmentId), parseInt(groupId), false); - if (!learningObjectIdentifier || !groupIdentifier) { + if (!learningObjectIdentifier) { return null; } return { learningObjectIdentifier, - inGroup: groupIdentifier, sequenceNumber: seq ? Number(seq) : FALLBACK_SEQ_NUM, }; } @@ -56,7 +53,7 @@ export async function getAllQuestionsHandler(req: Request, res: Response): Promi } export async function getQuestionHandler(req: Request, res: Response): Promise { - const questionId = await getQuestionId(req, res); + const questionId = getQuestionId(req, res); if (!questionId) { return; @@ -72,7 +69,7 @@ export async function getQuestionHandler(req: Request, res: Response): Promise { - const questionId = await getQuestionId(req, res); + const questionId = getQuestionId(req, res); const full = req.query.full === 'true'; if (!questionId) { @@ -106,7 +103,7 @@ export async function createQuestionHandler(req: Request, res: Response): Promis } export async function deleteQuestionHandler(req: Request, res: Response): Promise { - const questionId = await getQuestionId(req, res); + const questionId = getQuestionId(req, res); if (!questionId) { return; diff --git a/backend/src/entities/assignments/submission.entity.ts b/backend/src/entities/assignments/submission.entity.ts index 7a0ffc1c..728dd436 100644 --- a/backend/src/entities/assignments/submission.entity.ts +++ b/backend/src/entities/assignments/submission.entity.ts @@ -22,8 +22,7 @@ export class Submission { submissionNumber?: number; @ManyToOne({ - entity: () => Group, - primary: true + entity: () => Group }) onBehalfOf!: Group; diff --git a/backend/src/entities/questions/question.entity.ts b/backend/src/entities/questions/question.entity.ts index bb36e8a3..c6df4e6a 100644 --- a/backend/src/entities/questions/question.entity.ts +++ b/backend/src/entities/questions/question.entity.ts @@ -21,7 +21,7 @@ export class Question { @PrimaryKey({ type: 'integer', autoincrement: true }) sequenceNumber?: number; - @ManyToOne({ entity: () => Group, primary: true }) + @ManyToOne({ entity: () => Group }) inGroup!: Group; @ManyToOne({ diff --git a/backend/src/interfaces/question.ts b/backend/src/interfaces/question.ts index 1b2b6fc9..91b90796 100644 --- a/backend/src/interfaces/question.ts +++ b/backend/src/interfaces/question.ts @@ -33,7 +33,6 @@ export function mapToQuestionDTOId(question: Question): QuestionId { return { learningObjectIdentifier, - inGroup: mapToGroupDTO(question.inGroup), sequenceNumber: question.sequenceNumber!, }; } diff --git a/backend/src/interfaces/submission.ts b/backend/src/interfaces/submission.ts index 859370f6..bd80795a 100644 --- a/backend/src/interfaces/submission.ts +++ b/backend/src/interfaces/submission.ts @@ -38,7 +38,6 @@ export function mapToSubmission(submissionDTO: SubmissionDTO): Submission { submission.submitter = mapToStudent(submissionDTO.submitter); // Submission.submissionTime = submissionDTO.time; // Submission.onBehalfOf = submissionDTO.group!; - // TODO fix group submission.content = submissionDTO.content; return submission; diff --git a/backend/src/routes/questions.ts b/backend/src/routes/questions.ts index 59e3fe58..31a71f3b 100644 --- a/backend/src/routes/questions.ts +++ b/backend/src/routes/questions.ts @@ -15,11 +15,11 @@ router.get('/', getAllQuestionsHandler); router.post('/', createQuestionHandler); -router.delete('/:classId/assignment/:assignmentId/group/:groupId/:seq', deleteQuestionHandler); +router.delete('/:seq', deleteQuestionHandler); // Information about a question with id -router.get('/:classId/assignment/:assignmentId/group/:groupId/:seq', getQuestionHandler); +router.get('/:seq', getQuestionHandler); -router.get('/:classId/assignment/:assignmentId/group/:groupId/answers/:seq', getQuestionAnswersHandler); +router.get('/answers/:seq', getQuestionAnswersHandler); export default router; diff --git a/backend/tests/setup-tests.ts b/backend/tests/setup-tests.ts index 016099f3..5bd2fbd6 100644 --- a/backend/tests/setup-tests.ts +++ b/backend/tests/setup-tests.ts @@ -37,7 +37,7 @@ export async function setupTestApp(): Promise { learningObjects[1].attachments = attachments; - const questions = makeTestQuestions(em, students); + const questions = makeTestQuestions(em, students, groups); const answers = makeTestAnswers(em, teachers, questions); const submissions = makeTestSubmissions(em, students, groups); diff --git a/backend/tests/test_assets/assignments/submission.testdata.ts b/backend/tests/test_assets/assignments/submission.testdata.ts index f454b133..f6b49c6a 100644 --- a/backend/tests/test_assets/assignments/submission.testdata.ts +++ b/backend/tests/test_assets/assignments/submission.testdata.ts @@ -34,6 +34,7 @@ export function makeTestSubmissions(em: EntityManager, students: Student[], grou submissionNumber: 1, submitter: students[0], submissionTime: new Date(2025, 2, 20), + onBehalfOf: groups[0], content: '', }); @@ -44,6 +45,7 @@ export function makeTestSubmissions(em: EntityManager, students: Student[], grou submissionNumber: 2, submitter: students[0], submissionTime: new Date(2025, 2, 25), + onBehalfOf: groups[0], content: '', }); @@ -54,6 +56,7 @@ export function makeTestSubmissions(em: EntityManager, students: Student[], grou submissionNumber: 1, submitter: students[1], submissionTime: new Date(2025, 2, 20), + onBehalfOf: groups[1], content: '', }); diff --git a/backend/tests/test_assets/questions/questions.testdata.ts b/backend/tests/test_assets/questions/questions.testdata.ts index dff742bb..0ccd498e 100644 --- a/backend/tests/test_assets/questions/questions.testdata.ts +++ b/backend/tests/test_assets/questions/questions.testdata.ts @@ -2,12 +2,14 @@ import { EntityManager } from '@mikro-orm/core'; import { Question } from '../../../src/entities/questions/question.entity'; import { Language } from '@dwengo-1/common/util/language'; import { Student } from '../../../src/entities/users/student.entity'; +import {Group} from "../../../src/entities/assignments/group.entity"; -export function makeTestQuestions(em: EntityManager, students: Student[]): Question[] { +export function makeTestQuestions(em: EntityManager, students: Student[], groups: Group[]): Question[] { const question01 = em.create(Question, { learningObjectLanguage: Language.English, learningObjectVersion: 1, learningObjectHruid: 'id05', + inGroup: groups[0], sequenceNumber: 1, author: students[0], timestamp: new Date(), @@ -18,6 +20,7 @@ export function makeTestQuestions(em: EntityManager, students: Student[]): Quest learningObjectLanguage: Language.English, learningObjectVersion: 1, learningObjectHruid: 'id05', + inGroup: groups[0], sequenceNumber: 2, author: students[2], timestamp: new Date(), @@ -30,6 +33,7 @@ export function makeTestQuestions(em: EntityManager, students: Student[]): Quest learningObjectHruid: 'id04', sequenceNumber: 1, author: students[0], + inGroup: groups[0], timestamp: new Date(), content: 'question', }); @@ -40,6 +44,7 @@ export function makeTestQuestions(em: EntityManager, students: Student[]): Quest learningObjectHruid: 'id01', sequenceNumber: 1, author: students[1], + inGroup: groups[1], timestamp: new Date(), content: 'question', }); diff --git a/common/src/interfaces/question.ts b/common/src/interfaces/question.ts index 69a9590d..9b00e1bd 100644 --- a/common/src/interfaces/question.ts +++ b/common/src/interfaces/question.ts @@ -14,5 +14,4 @@ export interface QuestionDTO { export interface QuestionId { learningObjectIdentifier: LearningObjectIdentifier; sequenceNumber: number; - inGroup: GroupDTO; }