Skip to content

Commit 449b5c8

Browse files
committed
feat: multiple classes in week
1 parent 5c92677 commit 449b5c8

File tree

2 files changed

+63
-51
lines changed

2 files changed

+63
-51
lines changed

backend/app/scrap-registrations/scrap_registrations.ts

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -225,26 +225,31 @@ const scrapGroupDetails = async (groupUrl: string) => {
225225
const type = giveGroupType(mainContent.find("h1").text().trim());
226226
const group = getGroupNumber(mainContent.find("h1").text());
227227

228+
const days = [] as string[];
229+
const startTimeEndTimes = [] as { startTime: string; endTime: string }[];
230+
228231
const dayWeek = mainContent
229232
.find("table")
230233
.find("tbody")
231234
.find("tr")
232235
.eq(2)
233236
.find("td")
234237
.eq(1);
238+
dayWeek.children("div").each((_, element) => {
239+
const day = checkDay($(element).text().trim());
240+
const { startTime, endTime } = getStartEndTime($(element).text().trim());
241+
if (
242+
day !== "unknown" &&
243+
startTime !== "error" &&
244+
endTime !== "error" &&
245+
startTime !== "00:00" &&
246+
endTime !== "00:00"
247+
) {
248+
days.push(day);
249+
startTimeEndTimes.push({ startTime, endTime });
250+
}
251+
});
235252
const week = checkWeek(dayWeek.text());
236-
const day = checkDay(dayWeek.text());
237-
const { startTime, endTime } = getStartEndTime(
238-
mainContent
239-
.find("table")
240-
.find("tbody")
241-
.find("tr")
242-
.eq(2)
243-
.find("td")
244-
.eq(1)
245-
.text()
246-
.trim(),
247-
);
248253
const lecturer = mainContent
249254
.find("table")
250255
.find("tbody")
@@ -280,15 +285,13 @@ const scrapGroupDetails = async (groupUrl: string) => {
280285
.trim();
281286
const spotsOccupiedNumber = Number.parseInt(spotsOccupied, 10);
282287
const spotsTotalNumber = Number.parseInt(spotsTotal, 10);
283-
284288
return {
285289
name,
286290
type,
287291
group,
288292
week,
289-
day,
290-
startTime,
291-
endTime,
293+
days,
294+
startTimeEndTimes,
292295
lecturer,
293296
spotsOccupied: Number.isNaN(spotsOccupiedNumber) ? 0 : spotsOccupiedNumber,
294297
spotsTotal: Number.isNaN(spotsTotalNumber) ? 0 : spotsTotalNumber,

backend/commands/scraper.ts

Lines changed: 44 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -220,42 +220,51 @@ export default class Scraper extends BaseCommand {
220220
}),
221221
);
222222

223-
const group = await Group.updateOrCreate(
224-
{
225-
name: details.name.slice(0, 255),
226-
startTime: details.startTime.slice(0, 255),
227-
endTime: details.endTime.slice(0, 255),
228-
group: details.group.slice(0, 255),
229-
week: details.week,
230-
day: details.day.slice(0, 255),
231-
type: details.type.slice(0, 255),
232-
courseId:
233-
course.courseCode.slice(0, 255) +
234-
(extractLastStringInBrackets(registration.name) ??
235-
registration.name),
236-
},
237-
{
238-
name: details.name.slice(0, 255),
239-
startTime: details.startTime.slice(0, 255),
240-
endTime: details.endTime.slice(0, 255),
241-
group: details.group.slice(0, 255),
242-
week: details.week,
243-
day: details.day.slice(0, 255),
244-
type: details.type.slice(0, 255),
245-
courseId:
246-
course.courseCode.slice(0, 255) +
247-
(extractLastStringInBrackets(registration.name) ??
248-
registration.name),
249-
spotsOccupied: details.spotsOccupied,
250-
spotsTotal: details.spotsTotal,
251-
url: url.slice(0, 255),
252-
isActive: true,
253-
},
254-
);
223+
for (const day of details.days) {
224+
const group = await Group.updateOrCreate(
225+
{
226+
name: details.name.slice(0, 255),
227+
startTime: details.startTimeEndTimes[
228+
details.days.indexOf(day)
229+
].startTime.slice(0, 255),
230+
endTime: details.startTimeEndTimes[
231+
details.days.indexOf(day)
232+
].endTime.slice(0, 255),
233+
group: details.group.slice(0, 255),
234+
week: details.week,
235+
day: day.slice(0, 255),
236+
type: details.type.slice(0, 255),
237+
courseId:
238+
course.courseCode.slice(0, 255) +
239+
(extractLastStringInBrackets(registration.name) ??
240+
registration.name),
241+
},
242+
{
243+
name: details.name.slice(0, 255),
244+
startTime: details.startTimeEndTimes[
245+
details.days.indexOf(day)
246+
].startTime.slice(0, 255),
247+
endTime: details.startTimeEndTimes[
248+
details.days.indexOf(day)
249+
].endTime.slice(0, 255),
250+
group: details.group.slice(0, 255),
251+
week: details.week,
252+
day: day.slice(0, 255),
253+
type: details.type.slice(0, 255),
254+
courseId:
255+
course.courseCode.slice(0, 255) +
256+
(extractLastStringInBrackets(registration.name) ??
257+
registration.name),
258+
spotsOccupied: details.spotsOccupied,
259+
spotsTotal: details.spotsTotal,
260+
url: url.slice(0, 255),
261+
isActive: true,
262+
},
263+
);
264+
processedGroupIds.push(group.id);
255265

256-
processedGroupIds.push(group.id);
257-
258-
await group.related("lecturers").sync(lecturerIds);
266+
await group.related("lecturers").sync(lecturerIds);
267+
}
259268
}),
260269
);
261270
}

0 commit comments

Comments
 (0)