1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
import Lab from '@/models/Lab';
import PeerTeacher from '@/models/PeerTeacher';
import EventInfo from '../models/EventInfo';
export async function parseLabFile(file: File): Promise<Lab[]> {
const validCourses = [
'110',
'111',
'121',
'206',
'221',
// '222',
'312',
'313',
// '314',
'315',
];
const result: Lab[] = [];
const text = await file.text();
let jsonData;
try {
jsonData = JSON.parse(text);
} catch (e) {
throw new Error(e);
}
const labs = jsonData.data;
labs.forEach((lab: any) => {
if (validCourses.includes(lab.courseNumber)) {
const newLab = new Lab(lab.courseNumber, lab.sequenceNumber);
lab.meetingsFaculty.every((meeting: any) => {
const { meetingTime } = meeting;
if (meetingTime.meetingType === 'LAB') {
let days = '';
days += meetingTime.monday ? 'M' : '';
days += meetingTime.tuesday ? 'T' : '';
days += meetingTime.wednesday ? 'W' : '';
days += meetingTime.thursday ? 'R' : '';
days += meetingTime.friday ? 'F' : '';
newLab.event.days = days;
newLab.event.start = parseInt(meetingTime.beginTime, 10);
newLab.event.end = parseInt(meetingTime.endTime, 10);
return false;
}
return true;
});
result.push(newLab);
}
});
return result;
}
export async function parsePtSchedule(file: File): Promise<PeerTeacher> {
const text = await file.text();
const peerTeacher = new PeerTeacher();
// namePatter: <firstname> <lastname> <uin>
const namePattern = /^(.*)\s(.*)\s(\d{9})/;
// eventPattern (24hr time): MTWRF hh:mm - hh:mm
const eventPattern = /^(M?T?W?R?F?)\s(\d{1,2}:\d{2})\s?-\s?(\d{1,2}:\d{2})/;
const lines = text.split('\n').filter((line) => line.trim());
lines.forEach((line) => {
const ptName = line.match(namePattern);
if (ptName) {
[, peerTeacher.firstname, peerTeacher.lastname] = ptName;
peerTeacher.uin = parseInt(ptName[3], 10);
}
const eventMatch = line.match(eventPattern);
if (eventMatch) {
const newEvent = new EventInfo(eventMatch[1]);
newEvent.start = parseInt(eventMatch[2].replace(':', ''), 10);
newEvent.end = parseInt(eventMatch[3].replace(':', ''), 10);
peerTeacher.events.push(newEvent);
}
});
return peerTeacher;
}
export async function parsePtDatabase(file: File): Promise<{
labs: Map<string, Lab>,
peerTeachers: Map<number, PeerTeacher>
}> {
const text = await file.text();
const jsonObj = JSON.parse(text);
const result = {
labs: new Map(),
peerTeachers: new Map(),
};
Object.keys(jsonObj.labs).forEach((key) => {
const { course, section, event: { days, start, end } } = jsonObj.labs[key];
result.labs.set(key, new Lab(course,
section, new EventInfo(days, start, end)));
});
Object.keys(jsonObj.peerTeachers).forEach((key) => {
const pt = jsonObj.peerTeachers[key];
const ptObj = new PeerTeacher(pt.firstname, pt.lastname, pt.uin);
ptObj.events = pt.events.map((eventObj: any) => new EventInfo(eventObj.days,
eventObj.start, eventObj.end));
ptObj.assignedLabs = new Set();
pt.assignedLabs.forEach((labId: string) => {
ptObj.assignedLabs.add(labId);
});
result.peerTeachers.set(key, ptObj);
});
return result;
}
|