From 2657e49ad6b7fdd74f024f932aa70bfc19661691 Mon Sep 17 00:00:00 2001 From: Gerald Schmittinger Date: Sun, 23 Feb 2025 16:48:06 +0100 Subject: [PATCH] feat(backend): Question + Answer entities toegevoegd; kleine verbeteringen. --- .../entities/assigments/assignment.entity.ts | 11 +++++---- .../entities/assigments/submission.entity.ts | 22 ++++++++++------- .../content/learning-object.entity.ts | 16 ++++++++----- .../entities/content/learning-path.entity.ts | 6 ++++- .../src/entities/questions/answer.entity.ts | 19 +++++++++++++++ .../src/entities/questions/question.entity.ts | 24 +++++++++++++++++++ 6 files changed, 79 insertions(+), 19 deletions(-) create mode 100644 backend/src/entities/questions/answer.entity.ts create mode 100644 backend/src/entities/questions/question.entity.ts diff --git a/backend/src/entities/assigments/assignment.entity.ts b/backend/src/entities/assigments/assignment.entity.ts index 24151e84..294f75fe 100644 --- a/backend/src/entities/assigments/assignment.entity.ts +++ b/backend/src/entities/assigments/assignment.entity.ts @@ -1,7 +1,7 @@ -import {Entity, ManyToOne, OneToMany, PrimaryKey, Property} from "@mikro-orm/core"; +import {Entity, Enum, ManyToOne, OneToMany, PrimaryKey, Property} from "@mikro-orm/core"; import {Class} from "../classes/class.entity"; -import {LearningPath} from "../content/learning-path.entity"; import {Group} from "./group.entity" +import {Language} from "../content/language"; @Entity() export class Assignment { @@ -17,8 +17,11 @@ export class Assignment { @Property({type: "text"}) description!: string; - @ManyToOne({entity: () => LearningPath}) - task!: LearningPath; + @Property({type: "string"}) + learningPathHruid!: string; + + @Enum({items: () => Language}) + learningPathLanguage!: Language; @OneToMany({entity: () => Group, mappedBy: "assignment"}) groups!: Group[]; diff --git a/backend/src/entities/assigments/submission.entity.ts b/backend/src/entities/assigments/submission.entity.ts index d6ccbef4..57f7f980 100644 --- a/backend/src/entities/assigments/submission.entity.ts +++ b/backend/src/entities/assigments/submission.entity.ts @@ -1,22 +1,28 @@ import {Student} from "../users/student.entity"; import {Group} from "./group.entity"; -import {Entity, Enum, ManyToOne, PrimaryKey} from "@mikro-orm/core"; +import {Entity, Enum, ManyToOne, PrimaryKey, Property} from "@mikro-orm/core"; import {Language} from "../content/language"; @Entity() -export class Submission { +export class Submission { @ManyToOne({entity: () => Student, primary: true}) submitter!: Student; - @ManyToOne({entity: () => Group, primary: true}) - onBehalfOf!: Group; - @PrimaryKey({type: "string"}) - hruid!: string; + learningObjectHruid!: string; @Enum({items: () => Language, primary: true}) - language!: Language; + learningObjectLanguage!: Language; @PrimaryKey({type: "string"}) - version: number = "1"; + learningObjectVersion: number = "1"; + + @PrimaryKey({type: "datetime"}) + submissionTime: Date; + + @ManyToOne({entity: () => Group, nullable: true}) + onBehalfOf?: Group; + + @Property({type: "json"}) + content!: T; } diff --git a/backend/src/entities/content/learning-object.entity.ts b/backend/src/entities/content/learning-object.entity.ts index 0ade62a9..64f49ce8 100644 --- a/backend/src/entities/content/learning-object.entity.ts +++ b/backend/src/entities/content/learning-object.entity.ts @@ -1,9 +1,10 @@ -import {Embeddable, Embedded, Entity, Enum, OneToMany, PrimaryKey, Property} from "@mikro-orm/core"; +import {Embeddable, Embedded, Entity, Enum, ManyToMany, OneToMany, PrimaryKey, Property} from "@mikro-orm/core"; import {Language} from "./language"; import {Attachment} from "./attachment.entity"; +import {Teacher} from "../users/teacher.entity"; @Entity() -export class LearningObject { +export class LearningObject { @PrimaryKey({type: "string"}) hruid!: string; @@ -13,8 +14,8 @@ export class LearningObject { @PrimaryKey({type: "string"}) version: number = "1"; - @PrimaryKey({type: "string"}) - author!: string; + @ManyToMany({entity: () => Teacher}) + admins!: Teacher[]; @Property({type: "string"}) title!: string; @@ -52,6 +53,9 @@ export class LearningObject { @Property({type: "integer"}) estimatedTime!: number; + @Embedded({entity: () => ReturnValue}) + returnValue: ReturnValue; + @Property({type: "bool"}) available: boolean = true; @@ -75,12 +79,12 @@ export class EducationalGoal { } @Embeddable() -export class ReturnValue { +export class ReturnValue { @Property({type: "string"}) callbackUrl: string; @Property({type: "json"}) - callbackSchema: Object; + callbackSchema: R; } export enum ContentType { diff --git a/backend/src/entities/content/learning-path.entity.ts b/backend/src/entities/content/learning-path.entity.ts index a1346497..ef694af0 100644 --- a/backend/src/entities/content/learning-path.entity.ts +++ b/backend/src/entities/content/learning-path.entity.ts @@ -1,5 +1,6 @@ -import {Embeddable, Embedded, Entity, Enum, OneToOne, PrimaryKey, Property} from "@mikro-orm/core"; +import {Embeddable, Embedded, Entity, Enum, ManyToMany, OneToOne, PrimaryKey, Property} from "@mikro-orm/core"; import {Language} from "./language"; +import {Teacher} from "../users/teacher.entity"; @Entity() export class LearningPath { @@ -9,6 +10,9 @@ export class LearningPath { @Enum({items: () => Language, primary: true}) language!: Language; + @ManyToMany({entity: () => Teacher}) + admins!: Teacher[]; + @Property({type: "string"}) title!: string; diff --git a/backend/src/entities/questions/answer.entity.ts b/backend/src/entities/questions/answer.entity.ts new file mode 100644 index 00000000..545482a8 --- /dev/null +++ b/backend/src/entities/questions/answer.entity.ts @@ -0,0 +1,19 @@ +import {Entity, ManyToOne, PrimaryKey, Property} from "@mikro-orm/core"; +import {Question} from "./question.entity"; +import {Teacher} from "../users/teacher.entity"; + +@Entity() +export class Answer { + + @ManyToOne({entity: () => Teacher, primary: true}) + author!: Teacher; + + @ManyToOne({entity: () => Question, primary: true}) + toQuestion!: Question; + + @PrimaryKey({type: "datetime"}) + timestamp: Date; + + @Property({type: "text"}) + content: string; +} diff --git a/backend/src/entities/questions/question.entity.ts b/backend/src/entities/questions/question.entity.ts new file mode 100644 index 00000000..3a2976c5 --- /dev/null +++ b/backend/src/entities/questions/question.entity.ts @@ -0,0 +1,24 @@ +import {Entity, Enum, ManyToOne, PrimaryKey, Property} from "@mikro-orm/core"; +import {Language} from "../content/language"; +import {Student} from "../users/student.entity"; + +@Entity() +export class Question { + @ManyToOne({entity: () => Student, primary: true}) + author!: Student; + + @PrimaryKey({type: "string"}) + learningObjectHruid!: string; + + @Enum({items: () => Language, primary: true}) + learningObjectLanguage!: Language; + + @PrimaryKey({type: "string"}) + learningObjectVersion!: number = "1"; + + @PrimaryKey({type: "datetime"}) + timestamp!: Date; + + @Property({type: "text"}) + content!: string; +}