fix: fixed groups in return van createAssignment
This commit is contained in:
		
							parent
							
								
									e3fc4b72a7
								
							
						
					
					
						commit
						ba9906eb93
					
				
					 4 changed files with 17 additions and 23 deletions
				
			
		|  | @ -1,7 +1,5 @@ | ||||||
| import { Group } from '../entities/assignments/group.entity.js'; | import { Group } from '../entities/assignments/group.entity.js'; | ||||||
| import { Class } from '../entities/classes/class.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 { mapToStudentDTO } from './student.js'; | ||||||
| import { GroupDTO, GroupDTOId } from '@dwengo-1/common/interfaces/group'; | import { GroupDTO, GroupDTOId } from '@dwengo-1/common/interfaces/group'; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -15,14 +15,9 @@ import { mapToSubmissionDTO, mapToSubmissionDTOId } from '../interfaces/submissi | ||||||
| import { fetchClass } from './classes.js'; | import { fetchClass } from './classes.js'; | ||||||
| import { QuestionDTO, QuestionId } from '@dwengo-1/common/interfaces/question'; | import { QuestionDTO, QuestionId } from '@dwengo-1/common/interfaces/question'; | ||||||
| import { SubmissionDTO, SubmissionDTOId } from '@dwengo-1/common/interfaces/submission'; | 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 { putObject } from './service-helper.js'; | ||||||
| import { getLogger } from '../logging/initalize.js'; | import { fetchStudents } from './students.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 { ServerErrorException } from '../exceptions/server-error-exception.js'; | import { ServerErrorException } from '../exceptions/server-error-exception.js'; | ||||||
| 
 | 
 | ||||||
| export async function fetchAssignment(classid: string, assignmentNumber: number): Promise<Assignment> { | export async function fetchAssignment(classid: string, assignmentNumber: number): Promise<Assignment> { | ||||||
|  | @ -69,6 +64,7 @@ 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.  |         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. |         The assignment needs to be refetched in order for it to work. | ||||||
|         */ |         */ | ||||||
|  |          | ||||||
|         const assignmentCopy = await assignmentRepository.findByClassAndId(cls, assignment.id!); |         const assignmentCopy = await assignmentRepository.findByClassAndId(cls, assignment.id!); | ||||||
|      |      | ||||||
|         if (assignmentCopy === null) { |         if (assignmentCopy === null) { | ||||||
|  | @ -78,9 +74,7 @@ export async function createAssignment(classid: string, assignmentData: Assignme | ||||||
|         const groupRepository = getGroupRepository(); |         const groupRepository = getGroupRepository(); | ||||||
| 
 | 
 | ||||||
|         (assignmentData.groups as string[][]).forEach(async (memberUsernames) => { |         (assignmentData.groups as string[][]).forEach(async (memberUsernames) => { | ||||||
|             const members = (await Promise.all(memberUsernames.map(async (id) => fetchStudent(id)))).filter( |             const members = await fetchStudents(memberUsernames); | ||||||
|                 (student) => student !== null |  | ||||||
|             ); |  | ||||||
| 
 | 
 | ||||||
|             const newGroup = groupRepository.create({ |             const newGroup = groupRepository.create({ | ||||||
|                 assignment: assignmentCopy!, |                 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<AssignmentDTO> { | export async function getAssignment(classid: string, id: number): Promise<AssignmentDTO> { | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| import { EntityDTO } from '@mikro-orm/core'; | 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 { Group } from '../entities/assignments/group.entity.js'; | ||||||
| import { mapToGroupDTO, mapToGroupDTOId } from '../interfaces/group.js'; | import { mapToGroupDTO, mapToGroupDTOId } from '../interfaces/group.js'; | ||||||
| import { mapToSubmissionDTO, mapToSubmissionDTOId } from '../interfaces/submission.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 { fetchAssignment } from './assignments.js'; | ||||||
| import { NotFoundException } from '../exceptions/not-found-exception.js'; | import { NotFoundException } from '../exceptions/not-found-exception.js'; | ||||||
| import { putObject } from './service-helper.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<Group> { | export async function fetchGroup(classId: string, assignmentNumber: number, groupNumber: number): Promise<Group> { | ||||||
|     const assignment = await fetchAssignment(classId, assignmentNumber); |     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<GroupDTO> { | export async function createGroup(groupData: GroupDTO, classid: string, assignmentNumber: number): Promise<GroupDTO> { | ||||||
|     const studentRepository = getStudentRepository(); |  | ||||||
| 
 |  | ||||||
|     const memberUsernames = (groupData.members as string[]) || []; |     const memberUsernames = (groupData.members as string[]) || []; | ||||||
|     const members = ( |     const members = await fetchStudents(memberUsernames); | ||||||
|         await Promise.all( |  | ||||||
|             memberUsernames.map(async (id) => studentRepository.findByUsername(id)) |  | ||||||
|         ) |  | ||||||
|     ).filter((student): student is Student => student !== null); |  | ||||||
| 
 | 
 | ||||||
|     const assignment = await fetchAssignment(classid, assignmentNumber); |     const assignment = await fetchAssignment(classid, assignmentNumber); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -47,6 +47,11 @@ export async function fetchStudent(username: string): Promise<Student> { | ||||||
|     return user; |     return user; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | export async function fetchStudents(usernames: string[]): Promise<Student[]> { | ||||||
|  |     const members = await Promise.all(usernames.map(async (username) => await fetchStudent(username))); | ||||||
|  |     return members; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| export async function getStudent(username: string): Promise<StudentDTO> { | export async function getStudent(username: string): Promise<StudentDTO> { | ||||||
|     const user = await fetchStudent(username); |     const user = await fetchStudent(username); | ||||||
|     return mapToStudentDTO(user); |     return mapToStudentDTO(user); | ||||||
|  |  | ||||||
		Reference in a new issue
	
	 Adriaan Jacquet
						Adriaan Jacquet