fix(backend): Foute entity-structuur van leerpaden verbeterd.
Ook testen geschreven voor LearningPathRepository en LearningObjectRepository.
This commit is contained in:
		
							parent
							
								
									4d999c78ba
								
							
						
					
					
						commit
						1417907933
					
				
					 24 changed files with 474 additions and 64 deletions
				
			
		|  | @ -45,7 +45,7 @@ export class LearningObject { | |||
|     keywords: string[] = []; | ||||
| 
 | ||||
|     @Property({ type: 'array', nullable: true }) | ||||
|     targetAges?: number[]; | ||||
|     targetAges?: number[] = []; | ||||
| 
 | ||||
|     @Property({ type: 'bool' }) | ||||
|     teacherExclusive: boolean = false; | ||||
|  |  | |||
							
								
								
									
										37
									
								
								backend/src/entities/content/learning-path-node.entity.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								backend/src/entities/content/learning-path-node.entity.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,37 @@ | |||
| import {Entity, Enum, ManyToOne, OneToMany, PrimaryKey, Property} from "@mikro-orm/core"; | ||||
| import {Language} from "./language"; | ||||
| import {LearningPath} from "./learning-path.entity"; | ||||
| import {LearningPathTransition} from "./learning-path-transition.entity"; | ||||
| 
 | ||||
| @Entity() | ||||
| export class LearningPathNode { | ||||
|     @ManyToOne({ entity: () => LearningPath, primary: true }) | ||||
|     learningPath!: LearningPath; | ||||
| 
 | ||||
|     @PrimaryKey({ type: "numeric", autoincrement: true }) | ||||
|     nodeNumber!: number; | ||||
| 
 | ||||
|     @Property({ type: 'string' }) | ||||
|     learningObjectHruid!: string; | ||||
| 
 | ||||
|     @Enum({ items: () => Language }) | ||||
|     language!: Language; | ||||
| 
 | ||||
|     @Property({ type: 'number' }) | ||||
|     version!: number; | ||||
| 
 | ||||
|     @Property({ type: 'text', nullable: true }) | ||||
|     instruction?: string; | ||||
| 
 | ||||
|     @Property({ type: 'bool' }) | ||||
|     startNode!: boolean; | ||||
| 
 | ||||
|     @OneToMany({ entity: () => LearningPathTransition, mappedBy: "node" }) | ||||
|     transitions: LearningPathTransition[] = []; | ||||
| 
 | ||||
|     @Property({ length: 3 }) | ||||
|     createdAt: Date = new Date(); | ||||
| 
 | ||||
|     @Property({ length: 3, onUpdate: () => new Date() }) | ||||
|     updatedAt: Date = new Date(); | ||||
| } | ||||
|  | @ -0,0 +1,17 @@ | |||
| import {Entity, ManyToOne, PrimaryKey, Property} from "@mikro-orm/core"; | ||||
| import {LearningPathNode} from "./learning-path-node.entity"; | ||||
| 
 | ||||
| @Entity() | ||||
| export class LearningPathTransition { | ||||
|     @ManyToOne({entity: () => LearningPathNode }) | ||||
|     node!: LearningPathNode; | ||||
| 
 | ||||
|     @PrimaryKey({ type: 'numeric' }) | ||||
|     transitionNumber!: number; | ||||
| 
 | ||||
|     @Property({ type: 'string' }) | ||||
|     condition!: string; | ||||
| 
 | ||||
|     @ManyToOne({ entity: () => LearningPathNode }) | ||||
|     next!: LearningPathNode; | ||||
| } | ||||
|  | @ -1,16 +1,14 @@ | |||
| import { | ||||
|     Embeddable, | ||||
|     Embedded, | ||||
|     Entity, | ||||
|     Enum, | ||||
|     ManyToMany, | ||||
|     OneToOne, | ||||
|     ManyToMany, OneToMany, | ||||
|     PrimaryKey, | ||||
|     Property, | ||||
| } from '@mikro-orm/core'; | ||||
| import { Language } from './language.js'; | ||||
| import { Teacher } from '../users/teacher.entity.js'; | ||||
| import {LearningPathRepository} from "../../data/content/learning-path-repository"; | ||||
| import {LearningPathNode} from "./learning-path-node.entity"; | ||||
| 
 | ||||
| @Entity({repository: () => LearningPathRepository}) | ||||
| export class LearningPath { | ||||
|  | @ -29,45 +27,9 @@ export class LearningPath { | |||
|     @Property({ type: 'text' }) | ||||
|     description!: string; | ||||
| 
 | ||||
|     @Property({ type: 'blob' }) | ||||
|     image!: string; | ||||
|     @Property({ type: 'blob', nullable: true }) | ||||
|     image: Buffer | null = null; | ||||
| 
 | ||||
|     @Embedded({ entity: () => LearningPathNode, array: true }) | ||||
|     @OneToMany({ entity: () => LearningPathNode, mappedBy: "learningPath" }) | ||||
|     nodes: LearningPathNode[] = []; | ||||
| } | ||||
| 
 | ||||
| @Embeddable() | ||||
| export class LearningPathNode { | ||||
|     @Property({ type: 'string' }) | ||||
|     learningObjectHruid!: string; | ||||
| 
 | ||||
|     @Enum({ items: () => Language }) | ||||
|     language!: Language; | ||||
| 
 | ||||
|     @Property({ type: 'number' }) | ||||
|     version!: number; | ||||
| 
 | ||||
|     @Property({ type: 'longtext' }) | ||||
|     instruction!: string; | ||||
| 
 | ||||
|     @Property({ type: 'bool' }) | ||||
|     startNode!: boolean; | ||||
| 
 | ||||
|     @Embedded({ entity: () => LearningPathTransition, array: true }) | ||||
|     transitions!: LearningPathTransition[]; | ||||
| 
 | ||||
|     @Property({ length: 3 }) | ||||
|     createdAt: Date = new Date(); | ||||
| 
 | ||||
|     @Property({ length: 3, onUpdate: () => new Date() }) | ||||
|     updatedAt: Date = new Date(); | ||||
| } | ||||
| 
 | ||||
| @Embeddable() | ||||
| export class LearningPathTransition { | ||||
|     @Property({ type: 'string' }) | ||||
|     condition!: string; | ||||
| 
 | ||||
|     @OneToOne({ entity: () => LearningPathNode }) | ||||
|     next!: LearningPathNode; | ||||
| } | ||||
|  |  | |||
		Reference in a new issue
	
	 Gerald Schmittinger
						Gerald Schmittinger