From 8c096ffa15a86321076782378f4f7819a4c497bd Mon Sep 17 00:00:00 2001 From: Adriaan Jacquet Date: Sat, 12 Apr 2025 17:45:22 +0200 Subject: [PATCH] fix: nog steeds werkende aan 183 fix, probleem komt mogelijks door het feit dat group niet automatisch een groupNummer krijgt --- .../entities/assignments/assignment.entity.ts | 4 +- .../src/entities/assignments/group.entity.ts | 2 +- backend/src/interfaces/assignment.ts | 4 +- backend/src/interfaces/group.ts | 9 ++-- backend/src/services/groups.ts | 43 +++++++++++-------- backend/src/services/submissions.ts | 4 +- 6 files changed, 38 insertions(+), 28 deletions(-) diff --git a/backend/src/entities/assignments/assignment.entity.ts b/backend/src/entities/assignments/assignment.entity.ts index 14d22756..d532acef 100644 --- a/backend/src/entities/assignments/assignment.entity.ts +++ b/backend/src/entities/assignments/assignment.entity.ts @@ -1,4 +1,4 @@ -import { Entity, Enum, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'; +import { Collection, Entity, Enum, ManyToOne, OneToMany, PrimaryKey, Property } from '@mikro-orm/core'; import { Class } from '../classes/class.entity.js'; import { Group } from './group.entity.js'; import { Language } from '@dwengo-1/common/util/language'; @@ -35,5 +35,5 @@ export class Assignment { entity: () => Group, mappedBy: 'assignment', }) - groups!: Group[]; + groups!: Collection; } diff --git a/backend/src/entities/assignments/group.entity.ts b/backend/src/entities/assignments/group.entity.ts index 55770b7f..213e0f38 100644 --- a/backend/src/entities/assignments/group.entity.ts +++ b/backend/src/entities/assignments/group.entity.ts @@ -19,5 +19,5 @@ export class Group { @ManyToMany({ entity: () => Student, }) - members!: Collection; + members!: Student[]; } diff --git a/backend/src/interfaces/assignment.ts b/backend/src/interfaces/assignment.ts index a3c41e48..510635ab 100644 --- a/backend/src/interfaces/assignment.ts +++ b/backend/src/interfaces/assignment.ts @@ -16,7 +16,7 @@ export function mapToAssignmentDTOId(assignment: Assignment): AssignmentDTO { description: assignment.description, learningPath: assignment.learningPathHruid, language: assignment.learningPathLanguage, - groups: assignment.groups.map(mapToGroupDTOId), + groups: assignment.groups.map(group => mapToGroupDTOId(group, assignment.within)), }; } @@ -28,7 +28,7 @@ export function mapToAssignmentDTO(assignment: Assignment): AssignmentDTO { description: assignment.description, learningPath: assignment.learningPathHruid, language: assignment.learningPathLanguage, - groups: assignment.groups.map(mapToGroupDTO), + groups: assignment.groups.map(group => mapToGroupDTO(group, assignment.within)), }; } diff --git a/backend/src/interfaces/group.ts b/backend/src/interfaces/group.ts index ac0efa64..467fd3e6 100644 --- a/backend/src/interfaces/group.ts +++ b/backend/src/interfaces/group.ts @@ -1,21 +1,22 @@ import { Group } from '../entities/assignments/group.entity.js'; +import { Class } from '../entities/classes/class.entity.js'; import { mapToAssignmentDTO } from './assignment.js'; import { mapToClassDTO } from './class.js'; import { mapToStudentDTO } from './student.js'; import { GroupDTO } from '@dwengo-1/common/interfaces/group'; -export function mapToGroupDTO(group: Group): GroupDTO { +export function mapToGroupDTO(group: Group, cls: Class): GroupDTO { return { - class: mapToClassDTO(group.assignment.within), + class: mapToClassDTO(cls), assignment: mapToAssignmentDTO(group.assignment), groupNumber: group.groupNumber!, members: group.members.map(mapToStudentDTO), }; } -export function mapToGroupDTOId(group: Group): GroupDTO { +export function mapToGroupDTOId(group: Group, cls: Class): GroupDTO { return { - class: group.assignment.within.classId!, + class: cls.classId!, assignment: group.assignment.id!, groupNumber: group.groupNumber!, members: group.members.map((member) => member.username), diff --git a/backend/src/services/groups.ts b/backend/src/services/groups.ts index 9cffbe08..393268c1 100644 --- a/backend/src/services/groups.ts +++ b/backend/src/services/groups.ts @@ -1,4 +1,4 @@ -import { EntityDTO } from '@mikro-orm/core'; +import { Collection, EntityDTO } from '@mikro-orm/core'; import { getGroupRepository, getStudentRepository, getSubmissionRepository } from '../data/repositories.js'; import { Group } from '../entities/assignments/group.entity.js'; import { mapToGroupDTO, mapToGroupDTOId } from '../interfaces/group.js'; @@ -8,6 +8,9 @@ import { SubmissionDTO, SubmissionDTOId } from '@dwengo-1/common/interfaces/subm import { fetchAssignment } from './assignments.js'; import { NotFoundException } from '../exceptions/not-found-exception.js'; import { putObject } from './service-helper.js'; +import { Student } from '../entities/users/student.entity.js'; +import { GroupRepository } from '../data/assignments/group-repository.js'; +import { assert } from 'console'; export async function fetchGroup(classId: string, assignmentNumber: number, groupNumber: number): Promise { const assignment = await fetchAssignment(classId, assignmentNumber); @@ -24,7 +27,7 @@ export async function fetchGroup(classId: string, assignmentNumber: number, grou export async function getGroup(classId: string, assignmentNumber: number, groupNumber: number): Promise { const group = await fetchGroup(classId, assignmentNumber, groupNumber); - return mapToGroupDTO(group); + return mapToGroupDTO(group, group.assignment.within); } export async function putGroup( @@ -37,7 +40,7 @@ export async function putGroup( await putObject(group, groupData, getGroupRepository()); - return mapToGroupDTO(group); + return mapToGroupDTO(group, group.assignment.within); } export async function deleteGroup(classId: string, assignmentNumber: number, groupNumber: number): Promise { @@ -47,7 +50,7 @@ export async function deleteGroup(classId: string, assignmentNumber: number, gro const groupRepository = getGroupRepository(); await groupRepository.deleteByAssignmentAndGroupNumber(assignment, groupNumber); - return mapToGroupDTO(group); + return mapToGroupDTO(group, assignment.within); } export async function getExistingGroupFromGroupDTO(groupData: GroupDTO): Promise { @@ -62,27 +65,31 @@ export async function createGroup(groupData: GroupDTO, classid: string, assignme const studentRepository = getStudentRepository(); const memberUsernames = (groupData.members as string[]) || []; - const members = (await Promise.all([...memberUsernames].map(async (id) => studentRepository.findByUsername(id)))).filter( - (student) => student !== null - ); - - console.log(members); + const members = ( + await Promise.all( + memberUsernames.map(async (id) => studentRepository.findByUsername(id)) + ) + ).filter((student): student is Student => student !== null); const assignment = await fetchAssignment(classid, assignmentNumber); - - console.log(assignment); - + const groupRepository = getGroupRepository(); const newGroup = groupRepository.create({ assignment: assignment, members: members, }); - console.log(newGroup.assignment); - await groupRepository.save(newGroup); - console.log(newGroup.assignment); + assert(newGroup.groupNumber !== undefined, "NO GROUPNUMBER WAS ASSIGNED"); - return mapToGroupDTO(newGroup); + console.log(newGroup); + + try { + await groupRepository.save(newGroup); + } catch(e) { + console.log(e); + } + + return mapToGroupDTO(newGroup, newGroup.assignment.within); } export async function getAllGroups(classId: string, assignmentNumber: number, full: boolean): Promise { @@ -92,10 +99,10 @@ export async function getAllGroups(classId: string, assignmentNumber: number, fu const groups = await groupRepository.findAllGroupsForAssignment(assignment); if (full) { - return groups.map(mapToGroupDTO); + return groups.map(group => mapToGroupDTO(group, assignment.within)); } - return groups.map(mapToGroupDTOId); + return groups.map(group => mapToGroupDTOId(group, assignment.within)); } export async function getGroupSubmissions( diff --git a/backend/src/services/submissions.ts b/backend/src/services/submissions.ts index c7daff74..eb7b9a3b 100644 --- a/backend/src/services/submissions.ts +++ b/backend/src/services/submissions.ts @@ -32,7 +32,9 @@ export async function getAllSubmissions(loId: LearningObjectIdentifier): Promise export async function createSubmission(submissionDTO: SubmissionDTO): Promise { const submitter = await fetchStudent(submissionDTO.submitter.username); - const group = submissionDTO.group ? await getExistingGroupFromGroupDTO(submissionDTO.group) : undefined; + // TODO: fix + // const group = submissionDTO.group ? await getExistingGroupFromGroupDTO(submissionDTO.group) : undefined; + const group = undefined; const submissionRepository = getSubmissionRepository(); const submission = mapToSubmission(submissionDTO, submitter, group);