diff --git a/backend/src/data/assignments/assignment-repository.ts b/backend/src/data/assignments/assignment-repository.ts new file mode 100644 index 00000000..dcc2b45a --- /dev/null +++ b/backend/src/data/assignments/assignment-repository.ts @@ -0,0 +1,15 @@ +import {DwengoEntityRepository} from "../dwengo-entity-repository"; +import {Assignment} from "../../entities/assignments/assignment.entity"; +import {Class} from "../../entities/classes/class.entity"; + +export class AssignmentRepository extends DwengoEntityRepository { + public findByClassAndId(within: Class, id: number): Promise { + return this.findOne({within: within, id: id}); + } + public findAllAssignmentsInClass(within: Class): Promise { + return this.findAll({where: {within: within}}); + } + public deleteByClassAndId(within: Class, id: number): Promise { + return this.deleteWhere({within: within, id: id}); + } +} diff --git a/backend/src/data/assignments/group-repository.ts b/backend/src/data/assignments/group-repository.ts new file mode 100644 index 00000000..c7856a62 --- /dev/null +++ b/backend/src/data/assignments/group-repository.ts @@ -0,0 +1,15 @@ +import {DwengoEntityRepository} from "../dwengo-entity-repository"; +import {Group} from "../../entities/assignments/group.entity"; +import {Assignment} from "../../entities/assignments/assignment.entity"; + +export class GroupRepository extends DwengoEntityRepository { + public findByAssignmentAndGroupNumber(assignment: Assignment, groupNumber: number): Promise { + return this.findOne({assignment: assignment, groupNumber: groupNumber}); + } + public findAllGroupsForAssignment(assignment: Assignment): Promise { + return this.findAll({where: {assignment: assignment}}); + } + public deleteByAssignmentAndGroupNumber(assignment: Assignment, groupNumber: number) { + return this.deleteWhere({assignment: assignment, groupNumber: groupNumber}); + } +} diff --git a/backend/src/data/assignments/submission-repository.ts b/backend/src/data/assignments/submission-repository.ts new file mode 100644 index 00000000..90988578 --- /dev/null +++ b/backend/src/data/assignments/submission-repository.ts @@ -0,0 +1,34 @@ +import {DwengoEntityRepository} from "../dwengo-entity-repository"; +import {Group} from "../../entities/assignments/group.entity"; +import {Submission} from "../../entities/assignments/submission.entity"; +import {LearningObjectIdentifier} from "../../entities/content/learning-object-identifier"; +import {Student} from "../../entities/users/student.entity"; + +export class SubmissionRepository extends DwengoEntityRepository { + public findSubmissionByLearningObjectAndSubmissionNumber(loId: LearningObjectIdentifier, submissionNumber: number): Promise { + return this.findOne({ + learningObjectHruid: loId.hruid, + learningObjectLanguage: loId.language, + learningObjectVersion: loId.version, + submissionNumber: submissionNumber + }); + } + + public findMostRecentSubmissionForStudent(loId: LearningObjectIdentifier, submitter: Student): Promise { + return this.findOne({ + learningObjectHruid: loId.hruid, + learningObjectLanguage: loId.language, + learningObjectVersion: loId.version, + submitter: submitter, + }, {orderBy: {submissionNumber: "DESC"}}) + } + + public findMostRecentSubmissionForGroup(loId: LearningObjectIdentifier, group: Group): Promise { + return this.findOne({ + learningObjectHruid: loId.hruid, + learningObjectLanguage: loId.language, + learningObjectVersion: loId.version, + onBehalfOf: group, + }, {orderBy: {submissionNumber: "DESC"}}) + } +} diff --git a/backend/src/entities/assigments/assignment.entity.ts b/backend/src/entities/assignments/assignment.entity.ts similarity index 100% rename from backend/src/entities/assigments/assignment.entity.ts rename to backend/src/entities/assignments/assignment.entity.ts diff --git a/backend/src/entities/assigments/group.entity.ts b/backend/src/entities/assignments/group.entity.ts similarity index 100% rename from backend/src/entities/assigments/group.entity.ts rename to backend/src/entities/assignments/group.entity.ts diff --git a/backend/src/entities/assigments/submission.entity.ts b/backend/src/entities/assignments/submission.entity.ts similarity index 89% rename from backend/src/entities/assigments/submission.entity.ts rename to backend/src/entities/assignments/submission.entity.ts index 8f833518..381ac503 100644 --- a/backend/src/entities/assigments/submission.entity.ts +++ b/backend/src/entities/assignments/submission.entity.ts @@ -4,7 +4,7 @@ import {Entity, Enum, ManyToOne, PrimaryKey, Property} from "@mikro-orm/core"; import {Language} from "../content/language"; @Entity() -export class Submission { +export class Submission { @PrimaryKey({type: "string"}) learningObjectHruid!: string; @@ -14,7 +14,7 @@ export class Submission { @PrimaryKey({type: "string"}) learningObjectVersion: string = "1"; - @Property({type: "integer"}) + @PrimaryKey({type: "integer"}) submissionNumber!: number; @ManyToOne({entity: () => Student}) @@ -27,5 +27,5 @@ export class Submission { onBehalfOf?: Group; @Property({type: "json"}) - content!: T; + content!: string; } diff --git a/backend/src/entities/content/learning-object-identifier.ts b/backend/src/entities/content/learning-object-identifier.ts new file mode 100644 index 00000000..544ce8ea --- /dev/null +++ b/backend/src/entities/content/learning-object-identifier.ts @@ -0,0 +1,7 @@ +import {Language} from "./language"; + +export class LearningObjectIdentifier { + constructor(public hruid: string, public language: Language, public version: string) { + + } +} diff --git a/backend/src/entities/users/student.entity.ts b/backend/src/entities/users/student.entity.ts index 36fb1812..14ba4ad5 100644 --- a/backend/src/entities/users/student.entity.ts +++ b/backend/src/entities/users/student.entity.ts @@ -1,7 +1,7 @@ import {User} from "./user.entity"; import {Collection, Entity, ManyToMany} from '@mikro-orm/core'; import {Class} from "../classes/class.entity"; -import {Group} from "../assigments/group.entity"; +import {Group} from "../assignments/group.entity"; import {StudentRepository} from "../../data/users/student-repository"; @Entity({repository: () => StudentRepository})