From 74e6cc31e83ad570a9f06765d288e9024736e73f Mon Sep 17 00:00:00 2001 From: Furkan Sahin Date: Sat, 10 Apr 2021 21:35:13 -0500 Subject: Commit MVP --- src/features/parser.js | 138 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 src/features/parser.js (limited to 'src/features') diff --git a/src/features/parser.js b/src/features/parser.js new file mode 100644 index 0000000..f91d926 --- /dev/null +++ b/src/features/parser.js @@ -0,0 +1,138 @@ +import Lab from '@/models/Lab'; +import PeerTeacher from '@/models/PeerTeacher'; +import EventInfo from '../models/EventInfo'; + +export function parseLabFile(file) { + const validCourses = [ + '110', + '111', + '121', + '206', + '221', + // '222', + '312', + '313', + // '314', + '315', + ]; + + const reader = new FileReader(); + + return new Promise((resolve, reject) => { + const result = []; + + reader.onload = (event) => { + let jsonData; + try { + jsonData = JSON.parse(event.target.result); + } catch (e) { + reject(new Error(e)); + } + const labs = jsonData.data; + + labs.forEach((lab) => { + if (validCourses.includes(lab.courseNumber)) { + const newLab = new Lab(lab.courseNumber, lab.sequenceNumber); + + if (lab.instructionalMethod !== 'Web Based') { + lab.meetingsFaculty.every((meeting) => { + 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); + } + }); + + resolve(result); + }; + + reader.readAsText(file); + }); +} + +export function parsePtSchedule(file) { + const reader = new FileReader(); + + return new Promise((resolve) => { + reader.onload = (event) => { + const peerTeacher = new PeerTeacher(); + const namePattern = /^(.*)\s(.*)\s(\d{9})/; + const eventPattern = /^(M?T?W?R?F?)\s(\d{1,2}:\d{2})\s?-\s?(\d{1,2}:\d{2})/; + const lines = event.target.result.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); + } + }); + + resolve(peerTeacher); + }; + + reader.readAsText(file); + }); +} + +export function parsePtDatabase(file) { + const reader = new FileReader(); + + return new Promise((resolve) => { + reader.onload = (event) => { + const jsonObj = JSON.parse(event.target.result); + const result = { + labs: new Map(), + peerTeachers: new Map(), + }; + + Object.keys(jsonObj.labs).forEach((key) => { + const lab = jsonObj.labs[key]; + result.labs.set(key, new Lab(lab.course, + lab.section, new EventInfo(lab.event.days, lab.event.start, lab.event.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) => new EventInfo(eventObj.days, + eventObj.start, eventObj.end)); + ptObj.assignedLabs = new Set(); + pt.assignedLabs.forEach((labId) => { + ptObj.assignedLabs.add(labId); + }); + result.peerTeachers.set(key, ptObj); + }); + + resolve(result); + }; + + reader.readAsText(file); + }); +} -- cgit v1.2.3