From 9c638b11f60b92f106a874dd39c68d0ddc5faaae Mon Sep 17 00:00:00 2001 From: Gerald Schmittinger Date: Tue, 15 Apr 2025 11:03:41 +0200 Subject: [PATCH] fix(backend): Update MikroORM, Fix voor 'pks not iterable' problem in Groups --- backend/package.json | 12 +-- .../entities/assignments/assignment.entity.ts | 2 +- .../src/entities/assignments/group.entity.ts | 16 ++-- backend/src/interfaces/group.ts | 4 +- package-lock.json | 76 +++++++++---------- 5 files changed, 57 insertions(+), 53 deletions(-) diff --git a/backend/package.json b/backend/package.json index 3a89eb87..31e00f15 100644 --- a/backend/package.json +++ b/backend/package.json @@ -16,11 +16,11 @@ "test:unit": "vitest --run" }, "dependencies": { - "@mikro-orm/core": "6.4.9", - "@mikro-orm/knex": "6.4.9", - "@mikro-orm/postgresql": "6.4.9", - "@mikro-orm/reflection": "6.4.9", - "@mikro-orm/sqlite": "6.4.9", + "@mikro-orm/core": "6.4.12", + "@mikro-orm/knex": "6.4.12", + "@mikro-orm/postgresql": "6.4.12", + "@mikro-orm/reflection": "6.4.12", + "@mikro-orm/sqlite": "6.4.12", "axios": "^1.8.2", "cors": "^2.8.5", "cross": "^1.0.0", @@ -43,7 +43,7 @@ "winston-loki": "^6.1.3" }, "devDependencies": { - "@mikro-orm/cli": "6.4.9", + "@mikro-orm/cli": "6.4.12", "@types/cors": "^2.8.17", "@types/express": "^5.0.0", "@types/js-yaml": "^4.0.9", diff --git a/backend/src/entities/assignments/assignment.entity.ts b/backend/src/entities/assignments/assignment.entity.ts index d532acef..ed8745f6 100644 --- a/backend/src/entities/assignments/assignment.entity.ts +++ b/backend/src/entities/assignments/assignment.entity.ts @@ -35,5 +35,5 @@ export class Assignment { entity: () => Group, mappedBy: 'assignment', }) - groups!: Collection; + groups: Collection = new Collection(this); } diff --git a/backend/src/entities/assignments/group.entity.ts b/backend/src/entities/assignments/group.entity.ts index e26dcbe1..d27821c3 100644 --- a/backend/src/entities/assignments/group.entity.ts +++ b/backend/src/entities/assignments/group.entity.ts @@ -7,15 +7,19 @@ import { GroupRepository } from '../../data/assignments/group-repository.js'; repository: () => GroupRepository, }) export class Group { - @ManyToOne({ - entity: () => Assignment, - primary: true, - }) - assignment!: Assignment; - + /* + WARNING: Don't move the definition of groupNumber! If it does not come before the definition of assignment, + creating groups fails because of a MikroORM bug! + */ @PrimaryKey({ type: 'integer', autoincrement: true }) groupNumber?: number; + @ManyToOne({ + entity: () => Assignment, + primary: true + }) + assignment!: Assignment; + @ManyToMany({ entity: () => Student, owner: true, diff --git a/backend/src/interfaces/group.ts b/backend/src/interfaces/group.ts index 467fd3e6..9fd753e8 100644 --- a/backend/src/interfaces/group.ts +++ b/backend/src/interfaces/group.ts @@ -1,6 +1,6 @@ import { Group } from '../entities/assignments/group.entity.js'; import { Class } from '../entities/classes/class.entity.js'; -import { mapToAssignmentDTO } from './assignment.js'; +import {mapToAssignmentDTOId} from './assignment.js'; import { mapToClassDTO } from './class.js'; import { mapToStudentDTO } from './student.js'; import { GroupDTO } from '@dwengo-1/common/interfaces/group'; @@ -8,7 +8,7 @@ import { GroupDTO } from '@dwengo-1/common/interfaces/group'; export function mapToGroupDTO(group: Group, cls: Class): GroupDTO { return { class: mapToClassDTO(cls), - assignment: mapToAssignmentDTO(group.assignment), + assignment: mapToAssignmentDTOId(group.assignment), groupNumber: group.groupNumber!, members: group.members.map(mapToStudentDTO), }; diff --git a/package-lock.json b/package-lock.json index 27d261cb..dad1dd44 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,11 +31,11 @@ "name": "@dwengo-1/backend", "version": "0.1.1", "dependencies": { - "@mikro-orm/core": "6.4.9", - "@mikro-orm/knex": "6.4.9", - "@mikro-orm/postgresql": "6.4.9", - "@mikro-orm/reflection": "6.4.9", - "@mikro-orm/sqlite": "6.4.9", + "@mikro-orm/core": "6.4.12", + "@mikro-orm/knex": "6.4.12", + "@mikro-orm/postgresql": "6.4.12", + "@mikro-orm/reflection": "6.4.12", + "@mikro-orm/sqlite": "6.4.12", "axios": "^1.8.2", "cors": "^2.8.5", "cross": "^1.0.0", @@ -58,7 +58,7 @@ "winston-loki": "^6.1.3" }, "devDependencies": { - "@mikro-orm/cli": "6.4.9", + "@mikro-orm/cli": "6.4.12", "@types/cors": "^2.8.17", "@types/express": "^5.0.0", "@types/js-yaml": "^4.0.9", @@ -1817,15 +1817,15 @@ } }, "node_modules/@mikro-orm/cli": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/@mikro-orm/cli/-/cli-6.4.9.tgz", - "integrity": "sha512-LQzVsmar/0DoJkPGyz3OpB8pa9BCQtvYreEC71h0O+RcizppJjgBQNTkj5tJd2Iqvh4hSaMv6qTv0l5UK6F2Vw==", + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/@mikro-orm/cli/-/cli-6.4.12.tgz", + "integrity": "sha512-7rKtrR4GAmeHOCSIPqtL1rtKdAQFvuCghiNxbL2+ck7d5SHRLG/pSCmnW70p5160a9mJ8uCl8vfWIQNOsX94Sw==", "dev": true, "license": "MIT", "dependencies": { "@jercle/yargonaut": "1.1.5", - "@mikro-orm/core": "6.4.9", - "@mikro-orm/knex": "6.4.9", + "@mikro-orm/core": "6.4.12", + "@mikro-orm/knex": "6.4.12", "fs-extra": "11.3.0", "tsconfig-paths": "4.2.0", "yargs": "17.7.2" @@ -1839,9 +1839,9 @@ } }, "node_modules/@mikro-orm/core": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/@mikro-orm/core/-/core-6.4.9.tgz", - "integrity": "sha512-osB2TbvSH4ZL1s62LCBQFAnxPqLycX5fakPHOoztudixqfbVD5QQydeGizJXMMh2zKP6vRCwIJy3MeSuFxPjHg==", + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/@mikro-orm/core/-/core-6.4.12.tgz", + "integrity": "sha512-TzJJCFZCdyrVPt/K3UHdao8Iyj4xJSj2r0tYUCY4zNKwuUw6K3RlEYcWGUf85FWIAZJPpYqbv83WTb/H9OiyyQ==", "license": "MIT", "dependencies": { "dataloader": "2.2.3", @@ -1849,7 +1849,7 @@ "esprima": "4.0.1", "fs-extra": "11.3.0", "globby": "11.1.0", - "mikro-orm": "6.4.9", + "mikro-orm": "6.4.12", "reflect-metadata": "0.2.2" }, "engines": { @@ -1860,9 +1860,9 @@ } }, "node_modules/@mikro-orm/knex": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/@mikro-orm/knex/-/knex-6.4.9.tgz", - "integrity": "sha512-iGXJfe/TziVOQsWuxMIqkOpurysWzQA6kj3+FDtOkHJAijZhqhjSBnfUVHHY/JzU9o0M0rgLrDVJFry/uEaJEA==", + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/@mikro-orm/knex/-/knex-6.4.12.tgz", + "integrity": "sha512-KMocJ4fdAbf52I/K25eV+dZDWXdVJpiIaBuIRt04m+SiJ7HZPP0OTDt/mexX3WHWW2m/d1byDNIZecjmV0eRSA==", "license": "MIT", "dependencies": { "fs-extra": "11.3.0", @@ -1891,13 +1891,13 @@ } }, "node_modules/@mikro-orm/postgresql": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/@mikro-orm/postgresql/-/postgresql-6.4.9.tgz", - "integrity": "sha512-ZdVVFAL/TSbzpEmChGdH0oUpy2KiHLjNIeItZHRQgInn1X9p0qx28VVDR78p8qgRGkQ3LquxGTkvmWI0w7qi3A==", + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/@mikro-orm/postgresql/-/postgresql-6.4.12.tgz", + "integrity": "sha512-qWO2oerG2A9Jf6dCP/3tvnwxB/Y7gZGXOByG/iMlnQHeHEZ95G5GDe1TSZ/5Ho52wGoq3Vn3xzeKZwJdajbcEw==", "license": "MIT", "dependencies": { - "@mikro-orm/knex": "6.4.9", - "pg": "8.13.3", + "@mikro-orm/knex": "6.4.12", + "pg": "8.14.1", "postgres-array": "3.0.4", "postgres-date": "2.1.0", "postgres-interval": "4.0.2" @@ -1910,9 +1910,9 @@ } }, "node_modules/@mikro-orm/reflection": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/@mikro-orm/reflection/-/reflection-6.4.9.tgz", - "integrity": "sha512-fgY7yLrcZm3J/8dv9reUC4PQo7C2muImU31jmzz1SxmNKPJFDJl7OzcDZlM5NOisXzsWUBrcNdCyuQiWViVc3A==", + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/@mikro-orm/reflection/-/reflection-6.4.12.tgz", + "integrity": "sha512-RZAMFAwe+yBylbiaHTyBDXDZWkqcLVv6IxRAc/YGBhD+Z1NjZbrFRrNg7OQryEW13OUIuIrXTCgKb9C0Mem0cQ==", "license": "MIT", "dependencies": { "globby": "11.1.0", @@ -1926,12 +1926,12 @@ } }, "node_modules/@mikro-orm/sqlite": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/@mikro-orm/sqlite/-/sqlite-6.4.9.tgz", - "integrity": "sha512-O7Jy/5DrTWpJI/3qkhRJHl+OcECx1N625LHDODAAauOK3+MJB/bj80TrvQhe6d/CHZMmvxZ7m2GzaL1NulKxRw==", + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/@mikro-orm/sqlite/-/sqlite-6.4.12.tgz", + "integrity": "sha512-fIR/AkgUxOEKCiGxes8BrkNm86iP7eB0ZhvDjrRbinYxarGHtPIUEub0tY0jvQNbXo4s/GwRIPhA178pr5xEFA==", "license": "MIT", "dependencies": { - "@mikro-orm/knex": "6.4.9", + "@mikro-orm/knex": "6.4.12", "fs-extra": "11.3.0", "sqlite3": "5.1.7", "sqlstring-sqlite": "0.1.1" @@ -7850,9 +7850,9 @@ } }, "node_modules/mikro-orm": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/mikro-orm/-/mikro-orm-6.4.9.tgz", - "integrity": "sha512-XwVrWNT4NNwS6kHIKFNDfvy8L1eWcBBEHeTVzFFYcnb2ummATaLxqeVkNEmKA68jmdtfQdUmWBqGdbcIPwtL2Q==", + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/mikro-orm/-/mikro-orm-6.4.12.tgz", + "integrity": "sha512-uOJdx0q9Hg0SKYtHeJ73Iu2PhlU8LoyhaMm2PH9n1kvqpyoqUme2vKpwWywELFpZKgXwtkeIA8Ce56caYb593Q==", "license": "MIT", "engines": { "node": ">= 18.12.0" @@ -8649,14 +8649,14 @@ "license": "MIT" }, "node_modules/pg": { - "version": "8.13.3", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.13.3.tgz", - "integrity": "sha512-P6tPt9jXbL9HVu/SSRERNYaYG++MjnscnegFh9pPHihfoBSujsrka0hyuymMzeJKFWrcG8wvCKy8rCe8e5nDUQ==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.14.1.tgz", + "integrity": "sha512-0TdbqfjwIun9Fm/r89oB7RFQ0bLgduAhiIqIXOsyKoiC/L54DbuAAzIEN/9Op0f1Po9X7iCPXGoa/Ah+2aI8Xw==", "license": "MIT", "dependencies": { "pg-connection-string": "^2.7.0", - "pg-pool": "^3.7.1", - "pg-protocol": "^1.7.1", + "pg-pool": "^3.8.0", + "pg-protocol": "^1.8.0", "pg-types": "^2.1.0", "pgpass": "1.x" },