fix(backend): Modellering van ManyToMany-relationships verbeterd

This commit is contained in:
Gerald Schmittinger 2025-04-15 08:45:12 +02:00
parent f4fda7db5d
commit 451ac7546f
6 changed files with 13 additions and 17 deletions

View file

@ -18,6 +18,8 @@ export class Group {
@ManyToMany({
entity: () => Student,
owner: true,
inversedBy: "groups"
})
members!: Student[];
members: Collection<Student> = new Collection<Student>(this);
}

View file

@ -14,9 +14,9 @@ export class Class {
@Property({ type: 'string' })
displayName!: string;
@ManyToMany(() => Teacher)
@ManyToMany({entity: () => Teacher, owner: true, inversedBy: 'classes'})
teachers!: Collection<Teacher>;
@ManyToMany(() => Student)
@ManyToMany({entity: () => Student, owner: true, inversedBy: 'classes'})
students!: Collection<Student>;
}

View file

@ -8,9 +8,9 @@ import { StudentRepository } from '../../data/users/student-repository.js';
repository: () => StudentRepository,
})
export class Student extends User {
@ManyToMany(() => Class)
@ManyToMany({entity: () => Class, mappedBy: 'students'})
classes!: Collection<Class>;
@ManyToMany(() => Group)
groups!: Collection<Group>;
@ManyToMany({entity: () => Group, mappedBy: 'members'})
groups: Collection<Group> = new Collection<Group>(this);
}

View file

@ -5,6 +5,6 @@ import { TeacherRepository } from '../../data/users/teacher-repository.js';
@Entity({ repository: () => TeacherRepository })
export class Teacher extends User {
@ManyToMany(() => Class)
@ManyToMany({entity: () => Class, mappedBy: 'teachers'})
classes!: Collection<Class>;
}

View file

@ -9,7 +9,7 @@ export function errorHandler(err: unknown, _req: Request, res: Response, _: Next
logger.warn(`An error occurred while handling a request: ${err} (-> HTTP ${err.status})`);
res.status(err.status).json(err);
} else {
logger.error(`Unexpected error occurred while handing a request: ${JSON.stringify(err)}`);
logger.error(`Unexpected error occurred while handing a request: ${err}`);
res.status(500).json(err);
}
}

View file

@ -1,4 +1,4 @@
import { Collection, EntityDTO } from '@mikro-orm/core';
import { 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';
@ -9,8 +9,6 @@ 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<Group> {
const assignment = await fetchAssignment(classId, assignmentNumber);
@ -76,13 +74,9 @@ export async function createGroup(groupData: GroupDTO, classid: string, assignme
const groupRepository = getGroupRepository();
const newGroup = groupRepository.create({
assignment: assignment,
members: members,
members: members
});
assert(newGroup.groupNumber !== undefined, "NO GROUPNUMBER WAS ASSIGNED");
console.log(newGroup);
try {
await groupRepository.save(newGroup);
} catch(e) {