diff --git a/backend/src/controllers/submissions.ts b/backend/src/controllers/submissions.ts index a3d7694a..68851164 100644 --- a/backend/src/controllers/submissions.ts +++ b/backend/src/controllers/submissions.ts @@ -4,7 +4,7 @@ import { deleteSubmission, getAllSubmissions, getSubmission, - getSubmissionsForLearningObjectAndAssignment, getSubmissionsForLearningObjectAndGroup, + getSubmissionsForLearningObjectAndAssignment, } from '../services/submissions.js'; import { SubmissionDTO } from '@dwengo-1/common/interfaces/submission'; import { Language, languageMap } from '@dwengo-1/common/util/language'; @@ -17,25 +17,17 @@ export async function getSubmissionsHandler(req: Request, res: Response): Promis const lang = languageMap[req.query.language as string] || Language.Dutch; const version = parseInt(req.query.version as string) ?? 1; + const forGroup = req.query.forGroup as string | undefined; + let submissions: SubmissionDTO[] - if (req.query.groupId) { - submissions = await getSubmissionsForLearningObjectAndGroup( - loHruid, - lang, - version, - req.query.classId as string, - parseInt(req.query.assignmentId as string), - parseInt(req.query.groupId as string) - ); - } else { - submissions = await getSubmissionsForLearningObjectAndAssignment( - loHruid, - lang, - version, - req.query.classId as string, - parseInt(req.query.assignmentId as string) - ) - } + submissions = await getSubmissionsForLearningObjectAndAssignment( + loHruid, + lang, + version, + req.query.classId as string, + parseInt(req.query.assignmentId as string), + forGroup ? parseInt(forGroup) : undefined + ); res.json({ submissions }); } diff --git a/backend/src/data/assignments/submission-repository.ts b/backend/src/data/assignments/submission-repository.ts index 93089e3b..e028c7cd 100644 --- a/backend/src/data/assignments/submission-repository.ts +++ b/backend/src/data/assignments/submission-repository.ts @@ -61,21 +61,17 @@ export class SubmissionRepository extends DwengoEntityRepository { /** * Looks up all submissions for the given learning object which were submitted as part of the given assignment. - * When forStudentUsername is set, only the submissions of the given user's group are shown. + * When forGroup is set, only the submissions of the given group are shown. */ public async findAllSubmissionsForLearningObjectAndAssignment( loId: LearningObjectIdentifier, assignment: Assignment, - forStudentUsername?: string + forGroup?: number ): Promise { - const onBehalfOf = forStudentUsername + const onBehalfOf = forGroup ? { assignment, - members: { - $some: { - username: forStudentUsername, - }, - }, + groupNumber: forGroup } : { assignment, diff --git a/backend/src/entities/assignments/submission.entity.ts b/backend/src/entities/assignments/submission.entity.ts index 504b1104..4018c3af 100644 --- a/backend/src/entities/assignments/submission.entity.ts +++ b/backend/src/entities/assignments/submission.entity.ts @@ -18,7 +18,7 @@ export class Submission { }) learningObjectLanguage!: Language; - @PrimaryKey({ type: 'numeric' }) + @PrimaryKey({ type: 'numeric', autoincrement: false }) learningObjectVersion = 1; @ManyToOne({ diff --git a/backend/src/services/submissions.ts b/backend/src/services/submissions.ts index 723a9ad3..530be7a0 100644 --- a/backend/src/services/submissions.ts +++ b/backend/src/services/submissions.ts @@ -1,4 +1,4 @@ -import {getAssignmentRepository, getGroupRepository, getSubmissionRepository} from '../data/repositories.js'; +import {getAssignmentRepository, getSubmissionRepository} from '../data/repositories.js'; import { LearningObjectIdentifier } from '../entities/content/learning-object-identifier.js'; import { NotFoundException } from '../exceptions/not-found-exception.js'; import { mapToSubmission, mapToSubmissionDTO } from '../interfaces/submission.js'; @@ -37,7 +37,11 @@ export async function createSubmission(submissionDTO: SubmissionDTO): Promise { const loId = new LearningObjectIdentifier(learningObjectHruid, language, version); const assignment = await getAssignmentRepository().findByClassIdAndAssignmentId(classId, assignmentId); - const submissions = await getSubmissionRepository().findAllSubmissionsForLearningObjectAndAssignment(loId, assignment!, studentUsername); + const submissions = await getSubmissionRepository().findAllSubmissionsForLearningObjectAndAssignment(loId, assignment!, groupId); return submissions.map((s) => mapToSubmissionDTO(s)); } - -export async function getSubmissionsForLearningObjectAndGroup( - learningObjectHruid: string, - language: Language, - version: number, - classId: string, - assignmentNo: number, - groupNumber: number -): Promise { - const loId = new LearningObjectIdentifier(learningObjectHruid, language, version); - const assignment = await getAssignmentRepository().findByClassIdAndAssignmentId(classId, assignmentNo); - if (!assignment) { - throw new NotFoundException("Assignment not found!"); - } - const group = await getGroupRepository().findByAssignmentAndGroupNumber(assignment, groupNumber); - if (!group) { - throw new NotFoundException("Group not found!"); - } - const submissions = await getSubmissionRepository().findAllSubmissionsForGroup(group); - return submissions.map((s) => mapToSubmissionDTO(s)); -}