diff options
| author | Furkan Sahin <furkan-dev@proton.me> | 2021-11-05 09:27:35 -0500 |
|---|---|---|
| committer | Furkan Sahin <furkan-dev@proton.me> | 2021-11-05 09:27:35 -0500 |
| commit | 85380b4b60bf74507a01957b29bd6e3808e216db (patch) | |
| tree | a43784660fdc29e5b95df3e358cf722eec2b092b /src/models/PeerTeacher.ts | |
| parent | ffef3a6be19d1139b6378c8119d444082dd0cbac (diff) | |
| parent | 29fc563863f561cdc707485289c5580b4397a580 (diff) | |
Merge pull request #10 from cobraguy/rewrite
Update to Svelte app
Diffstat (limited to 'src/models/PeerTeacher.ts')
| -rw-r--r-- | src/models/PeerTeacher.ts | 85 |
1 files changed, 46 insertions, 39 deletions
diff --git a/src/models/PeerTeacher.ts b/src/models/PeerTeacher.ts index f387431..5d955fd 100644 --- a/src/models/PeerTeacher.ts +++ b/src/models/PeerTeacher.ts @@ -1,41 +1,48 @@ -import EventInfo from './EventInfo'; +import EventInfo from "./EventInfo"; + +interface PeerTeacherSerializeInfo { + id: number, + firstname: string, + lastname: string, + events: { + days: string, + start: number, + end: number + }[], + labs: number[] +} export default class PeerTeacher { - firstname: string; - - lastname: string; - - uin: number; - - events: EventInfo[]; - - assignedLabs: Set<string>; - - constructor(firstname = '', lastname = '', uin = 0) { - this.firstname = firstname; - this.lastname = lastname; - this.uin = uin; - this.events = []; - this.assignedLabs = new Set(); - } - - conflictsWith(event: EventInfo) { - let conflicts = false; - this.events.every((item) => { - if (item.conflictsWith(event)) { - conflicts = true; - return false; - } - return true; - }); - return conflicts; - } - - get name() { - return `${this.firstname} ${this.lastname}`; - } - - get id() { - return this.uin; - } -} + id: number; + firstname: string; + lastname: string; + events: EventInfo[]; + labs: Set<number>; + + constructor(id: number | string, firstname: string, lastname: string) { + if(typeof id === "string") { + id = parseInt(id, 10); + } + + this.id = id; + this.firstname = firstname; + this.lastname = lastname; + this.events = []; + this.labs = new Set(); + } + + static fromJSON({id, firstname, lastname, events, labs}: PeerTeacherSerializeInfo) { + const pt = new PeerTeacher(id, firstname, lastname); + pt.events = events.map(e => EventInfo.fromJSON(e)); + pt.labs = new Set(labs); + return pt; + } + + conflictsWith(event: EventInfo) { + return this.events.some(item => item.conflictsWith(event)); + } + + get name() { + return `${this.firstname} ${this.lastname}`; + } +}
\ No newline at end of file |
