Skip to content
This repository was archived by the owner on Jul 27, 2024. It is now read-only.

Commit 67b044b

Browse files
committed
standardize take of a course in FE
- semester is now stored as a string(same enum as in BE), and not ints. This makes some utility functions redundant and simplifies processing. - The 'semester' and 'year' fields of Course, have been moved to the 'take' object field of a Course. Now, the Course 'data_year' and 'semester' fields purely reflect the course's state in the DB. This distinction is important for courses with any "any" field, whose assigned take in pratice(sem1/sem2) may be different from the one stated in the DB, as well as annual semesters which are currently classified as year 1.
1 parent ec42187 commit 67b044b

File tree

7 files changed

+23
-32
lines changed

7 files changed

+23
-32
lines changed

Closure_Front_End/src/components/Semester.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export default {
5050
return this.courses
5151
.filter(
5252
(course) =>
53-
course.year == this.year.id && course.semester == this.semester.id
53+
course.take.year === this.year.id && course.take.semester === this.semester.id
5454
)
5555
.sort((c1, c2) => c1.type - c2.type);
5656
},

Closure_Front_End/src/components/Year.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ export default {
2626
data() {
2727
return {
2828
semesters: [
29-
{ id: 1, name: "סמסטר א" },
30-
{ id: 2, name: "סמסטר ב" },
29+
{ id: "FIRST", name: "סמסטר א" },
30+
{ id: "SECOND", name: "סמסטר ב" },
3131
]
3232
};
3333
},

Closure_Front_End/src/course-store.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ export const moveCourse = ({course, newYear, newSemester}) => {
2828
if (!course) {
2929
throw new Error("Course must not be undefined/null")
3030
}
31-
course.year = newYear
32-
course.semester = newSemester
31+
course.take.year = newYear
32+
course.take.semester = newSemester
3333
}
3434

3535
export const deleteCourse = (course) => {

Closure_Front_End/src/huji-import/CandidateCourses.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,11 @@
4646
<td>
4747
<div class="control">
4848
<label class="radio">
49-
<input type="radio" id="one" value="FIRST" v-model="course.semester">
49+
<input type="radio" id="one" value="FIRST" v-model="course.take.semester">
5050
א'
5151
</label>
5252
<label class="radio">
53-
<input type="radio" id="two" value="SECOND" v-model="course.semester">
53+
<input type="radio" id="two" value="SECOND" v-model="course.take.semester">
5454
ב'
5555
</label>
5656
</div>
@@ -110,7 +110,7 @@ export default {
110110
111111
/** The semester must be set for all courses in order to begin the import */
112112
canImport() {
113-
return this.courses.every(course => course.semester)
113+
return this.courses.every(course => course.take.semester)
114114
},
115115
116116
/** If the user has already inserted courses before beginning import,

Closure_Front_End/src/huji-import/ParsedCoursesTables.vue

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,22 @@ const processCourses = async (parsedCourses, http) => {
3030
console.error(res.data.results)
3131
}
3232
const gottenCourse = res.data.results[0]
33-
const finalCourse = { ... course, name: gottenCourse.name, type: gottenCourse.type }
33+
const finalCourse = { ...gottenCourse,
34+
take: { year: course.year, semester: course.semester },
35+
statistics_url: course.statistics_url
36+
};
3437
if (["FIRST", "SECOND"].includes(gottenCourse.semester)) {
3538
if (course.semester && course.semester !== gottenCourse.semester) {
3639
console.warn(`Course ${course.course_id} - ${course.name} at year ${course.year} is offered only in semester `
3740
+`${gottenCourse.semester}, but student took it in ${course.semester}`)
38-
finalCourse.semester = course.semester
41+
finalCourse.take.semester = course.semester
3942
} else {
40-
finalCourse.semester = gottenCourse.semester
43+
finalCourse.take.semester = gottenCourse.semester
4144
}
4245
} else if (gottenCourse.semester === "EITHER") {
4346
finalCourse.ambiguous = !course.semester
4447
} else if (["ANNUAL", "SUMMER"].includes(gottenCourse.semester)) {
45-
finalCourse.semester = 'FIRST'
48+
finalCourse.take.semester = 'FIRST'
4649
console.warn(`Course ${course.course_id} - ${course.name} at year ${course.year} which is offered at unsupported period `
4750
+`${gottenCourse.semester}, will be considered as part of the first semester`)
4851
}
@@ -65,8 +68,9 @@ export default {
6568
const finishedProcessing = ref(false)
6669
6770
onMounted(async () => {
68-
console.log(`processing ${parsedCourses.value.length} courses`);
71+
console.log(`processing ${parsedCourses.value.length} courses scraped from HUJI site:`, parsedCourses.value);
6972
const processedCourses = await processCourses(parsedCourses, http)
73+
console.log(`processed courses`, processedCourses)
7074
7175
processedCourses.sort((a, b) => {
7276
if (a.ambiguous === b.ambiguous) {

Closure_Front_End/src/utils.js

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,3 @@
1-
2-
/** A mapping between API "semester" values to the "semester" property used in the front-end,
3-
which indicates their positioning.
4-
*/
5-
export const API_SEMESTER_TO_PROP_INT = new Map(Object.entries({
6-
FIRST: 1,
7-
SECOND: 2
8-
}))
9-
10-
/** A mapping between the "semester" property values used in the front-end, to their corresponding
11-
* values in the backend API
12-
*/
13-
export const PROP_INT_TO_API_SEMESTER = new Map(Array.from(API_SEMESTER_TO_PROP_INT, a => a.reverse()))
14-
15-
161
export function isString(x) {
172
return Object.prototype.toString.call(x) === "[object String]"
183
}

Closure_Front_End/src/views/CourseImport.vue

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ import Instructions from "@/huji-import/Instructions.vue";
5151
import { default as INITIAL_COURSES } from "@/huji-import/example-parsed-courses.js";
5252
import { TRY_HOOK_MESSAGE_TYPE, HOOKED_MESSAGE_TYPE, STARTED_MESSAGE_TYPE, GOT_COURSE_MESSAGE_TYPE, FINISHED_PARSING_MESSAGE_TYPE } from '@/huji-import/course-scrape-communication.js'
5353
import ParsedCoursesTables from "@/huji-import/ParsedCoursesTables.vue";
54-
import { API_SEMESTER_TO_PROP_INT } from "@/utils.js";
5554
5655
const HUJI_ORIGIN = "https://www.huji.ac.il";
5756
@@ -119,12 +118,15 @@ export default {
119118
this.courses.push({ ...course, key: this.courses.length });
120119
},
121120
onImportCourses({ courses, importMode }) {
122-
const firstYear = Math.min(...courses.map(course => course.year));
121+
console.log('onImportCourses', courses)
122+
const firstYear = Math.min(...courses.map(course => course.take.year));
123123
const coursesForDisplay = courses.map(course => {
124124
return {
125125
...course,
126-
year: course.year - firstYear + 1,
127-
semester: API_SEMESTER_TO_PROP_INT.get(course.semester)
126+
take: {
127+
year: course.take.year - firstYear + 1,
128+
semester: course.take.semester
129+
}
128130
};
129131
});
130132
addCourses(coursesForDisplay, importMode === 'overwrite');

0 commit comments

Comments
 (0)