From a803b45046904a2e4220801b21267668a2045f50 Mon Sep 17 00:00:00 2001 From: Gerald Schmittinger Date: Wed, 16 Apr 2025 10:53:30 +0200 Subject: [PATCH] fix(backend): nodeNumber handmatig invullen Om MikroORM bug die optreedt bij het persisteren van een kind van een entity met automatisch gegenereerde PK te vermijden. --- .../content/learning-path-node.entity.ts | 8 ++++---- .../content/learning-path-transition.entity.ts | 6 +++--- .../learning-paths/learning-path-service.ts | 3 ++- backend/tests/test-utils/load-test-asset.ts | 4 ++++ backend/tool/seed.ts | 18 +++++++++++++++--- 5 files changed, 28 insertions(+), 11 deletions(-) diff --git a/backend/src/entities/content/learning-path-node.entity.ts b/backend/src/entities/content/learning-path-node.entity.ts index 818799b7..f21adc78 100644 --- a/backend/src/entities/content/learning-path-node.entity.ts +++ b/backend/src/entities/content/learning-path-node.entity.ts @@ -5,12 +5,12 @@ import { Language } from '@dwengo-1/common/util/language'; @Entity() export class LearningPathNode { - @ManyToOne({ entity: () => LearningPath, primary: true }) - learningPath!: Rel; - @PrimaryKey({ type: 'integer', autoincrement: true }) nodeNumber?: number; + @ManyToOne({ entity: () => LearningPath, primary: true }) + learningPath!: Rel; + @Property({ type: 'string' }) learningObjectHruid!: string; @@ -27,7 +27,7 @@ export class LearningPathNode { startNode!: boolean; @OneToMany({ entity: () => LearningPathTransition, mappedBy: 'node' }) - transitions: Collection = new Collection(this); + transitions!: Collection; @Property({ length: 3 }) createdAt: Date = new Date(); diff --git a/backend/src/entities/content/learning-path-transition.entity.ts b/backend/src/entities/content/learning-path-transition.entity.ts index 7d6601a3..0f466fdd 100644 --- a/backend/src/entities/content/learning-path-transition.entity.ts +++ b/backend/src/entities/content/learning-path-transition.entity.ts @@ -3,12 +3,12 @@ import { LearningPathNode } from './learning-path-node.entity.js'; @Entity() export class LearningPathTransition { - @ManyToOne({ entity: () => LearningPathNode, primary: true }) - node!: Rel; - @PrimaryKey({ type: 'numeric' }) transitionNumber!: number; + @ManyToOne({ entity: () => LearningPathNode, primary: true }) + node!: Rel; + @Property({ type: 'string' }) condition!: string; diff --git a/backend/src/services/learning-paths/learning-path-service.ts b/backend/src/services/learning-paths/learning-path-service.ts index 1f99fa84..3b8a257c 100644 --- a/backend/src/services/learning-paths/learning-path-service.ts +++ b/backend/src/services/learning-paths/learning-path-service.ts @@ -29,10 +29,11 @@ export function mapToLearningPath( admins, image: dto.image ? Buffer.from(base64ToArrayBuffer(dto.image)) : null }); - const nodes = dto.nodes.map((nodeDto: LearningObjectNode) => + const nodes = dto.nodes.map((nodeDto: LearningObjectNode, i: number) => repo.createNode({ learningPath: path, learningObjectHruid: nodeDto.learningobject_hruid, + nodeNumber: i, language: nodeDto.language, version: nodeDto.version, startNode: nodeDto.start_node ?? false, diff --git a/backend/tests/test-utils/load-test-asset.ts b/backend/tests/test-utils/load-test-asset.ts index 2a4a7786..c3879d12 100644 --- a/backend/tests/test-utils/load-test-asset.ts +++ b/backend/tests/test-utils/load-test-asset.ts @@ -1,5 +1,9 @@ import fs from 'fs'; import path from 'node:path'; +import {fileURLToPath} from "node:url"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); /** * Load the asset at the given path. diff --git a/backend/tool/seed.ts b/backend/tool/seed.ts index f1742b69..393f9721 100644 --- a/backend/tool/seed.ts +++ b/backend/tool/seed.ts @@ -49,12 +49,24 @@ export async function seedDatabase(): Promise { const answers = makeTestAnswers(em, teachers, questions); const submissions = makeTestSubmissions(em, students, groups); + // Persist all entities - await em.persistAndFlush([ + /*await em.persistAndFlush([ ...students, ...teachers, ...learningObjects, - ...learningPaths, + ]);*/ + + try { + await em.persistAndFlush(learningPaths[0]); + } catch (e) { + "hey"; + } + /*await em.persistAndFlush(learningPaths[1]); + await em.persistAndFlush(learningPaths[2]); + await em.persistAndFlush(learningPaths[3]); + + await em.persistAndFlush([ ...classes, ...assignments, ...groups, @@ -64,7 +76,7 @@ export async function seedDatabase(): Promise { ...questions, ...answers, ...submissions, - ]); + ])*/ logger.info('Development database seeded successfully!');