diff --git a/backend/src/interfaces/group.ts b/backend/src/interfaces/group.ts index 08a2adfc..2d7f9afa 100644 --- a/backend/src/interfaces/group.ts +++ b/backend/src/interfaces/group.ts @@ -1,7 +1,5 @@ import { Group } from '../entities/assignments/group.entity.js'; import { Class } from '../entities/classes/class.entity.js'; -import {mapToAssignmentDTOId} from './assignment.js'; -import { mapToClassDTO } from './class.js'; import { mapToStudentDTO } from './student.js'; import { GroupDTO, GroupDTOId } from '@dwengo-1/common/interfaces/group'; diff --git a/backend/src/services/assignments.ts b/backend/src/services/assignments.ts index 2e0d7b6d..ce6c248d 100644 --- a/backend/src/services/assignments.ts +++ b/backend/src/services/assignments.ts @@ -15,14 +15,9 @@ import { mapToSubmissionDTO, mapToSubmissionDTOId } from '../interfaces/submissi import { fetchClass } from './classes.js'; import { QuestionDTO, QuestionId } from '@dwengo-1/common/interfaces/question'; import { SubmissionDTO, SubmissionDTOId } from '@dwengo-1/common/interfaces/submission'; -import { assign, EntityDTO } from '@mikro-orm/core'; +import { EntityDTO } from '@mikro-orm/core'; import { putObject } from './service-helper.js'; -import { getLogger } from '../logging/initalize.js'; -import { languageMap } from '@dwengo-1/common/util/language'; -import { createGroup } from './groups.js'; -import { GroupDTO } from 'dwengo-1-common/interfaces/group'; -import { fetchStudent } from './students.js'; -import { assert } from 'console'; +import { fetchStudents } from './students.js'; import { ServerErrorException } from '../exceptions/server-error-exception.js'; export async function fetchAssignment(classid: string, assignmentNumber: number): Promise { @@ -69,8 +64,9 @@ export async function createAssignment(classid: string, assignmentData: Assignme For some reason when trying to add groups, it does not work when using the original assignment variable. The assignment needs to be refetched in order for it to work. */ + const assignmentCopy = await assignmentRepository.findByClassAndId(cls, assignment.id!); - + if (assignmentCopy === null) { throw new ServerErrorException("Something has gone horribly wrong. Could not find newly added assignment which is needed to add groups."); } @@ -78,9 +74,7 @@ export async function createAssignment(classid: string, assignmentData: Assignme const groupRepository = getGroupRepository(); (assignmentData.groups as string[][]).forEach(async (memberUsernames) => { - const members = (await Promise.all(memberUsernames.map(async (id) => fetchStudent(id)))).filter( - (student) => student !== null - ); + const members = await fetchStudents(memberUsernames); const newGroup = groupRepository.create({ assignment: assignmentCopy!, @@ -90,7 +84,10 @@ export async function createAssignment(classid: string, assignmentData: Assignme }); } - return mapToAssignmentDTO(assignment); + /* Need to refetch the assignment here again such that the groups are added. */ + const assignmentWithGroups = await fetchAssignment(classid, assignment.id!); + + return mapToAssignmentDTO(assignmentWithGroups); } export async function getAssignment(classid: string, id: number): Promise { diff --git a/backend/src/services/groups.ts b/backend/src/services/groups.ts index 5fceb67f..f9889416 100644 --- a/backend/src/services/groups.ts +++ b/backend/src/services/groups.ts @@ -1,5 +1,5 @@ import { EntityDTO } from '@mikro-orm/core'; -import { getGroupRepository, getStudentRepository, getSubmissionRepository } from '../data/repositories.js'; +import { getGroupRepository, getSubmissionRepository } from '../data/repositories.js'; import { Group } from '../entities/assignments/group.entity.js'; import { mapToGroupDTO, mapToGroupDTOId } from '../interfaces/group.js'; import { mapToSubmissionDTO, mapToSubmissionDTOId } from '../interfaces/submission.js'; @@ -8,7 +8,7 @@ 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 { fetchStudents } from './students.js'; export async function fetchGroup(classId: string, assignmentNumber: number, groupNumber: number): Promise { const assignment = await fetchAssignment(classId, assignmentNumber); @@ -60,14 +60,8 @@ export async function getExistingGroupFromGroupDTO(groupData: GroupDTO): Promise } export async function createGroup(groupData: GroupDTO, classid: string, assignmentNumber: number): Promise { - const studentRepository = getStudentRepository(); - const memberUsernames = (groupData.members as string[]) || []; - const members = ( - await Promise.all( - memberUsernames.map(async (id) => studentRepository.findByUsername(id)) - ) - ).filter((student): student is Student => student !== null); + const members = await fetchStudents(memberUsernames); const assignment = await fetchAssignment(classid, assignmentNumber); diff --git a/backend/src/services/students.ts b/backend/src/services/students.ts index a585a85e..d8a06514 100644 --- a/backend/src/services/students.ts +++ b/backend/src/services/students.ts @@ -47,6 +47,11 @@ export async function fetchStudent(username: string): Promise { return user; } +export async function fetchStudents(usernames: string[]): Promise { + const members = await Promise.all(usernames.map(async (username) => await fetchStudent(username))); + return members; +} + export async function getStudent(username: string): Promise { const user = await fetchStudent(username); return mapToStudentDTO(user);