Refactor timetable retrieval methods to include nextWeek parameter for better flexibility
This commit is contained in:
parent
f277d37cd8
commit
49221af280
3 changed files with 85 additions and 20 deletions
1
bun.lock
1
bun.lock
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
"lockfileVersion": 1,
|
||||
"configVersion": 0,
|
||||
"workspaces": {
|
||||
"": {
|
||||
"name": "comcigan.ts",
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ export default class Comcigan {
|
|||
|
||||
private async getRawTimetable(
|
||||
schoolCode: number,
|
||||
nextWeek = false,
|
||||
): Promise<Timetable[][][][]> {
|
||||
const {
|
||||
mainRoute,
|
||||
|
|
@ -45,11 +46,10 @@ export default class Comcigan {
|
|||
originalCode,
|
||||
dayCode,
|
||||
subjectCode,
|
||||
nextWeek,
|
||||
} = await this.dataManager.getData()
|
||||
const res = await this.http
|
||||
.get(
|
||||
`${mainRoute}_T?${encodeBase64(`${timetableRoute}_${schoolCode}_0_${nextWeek ? 2 : 1}`)}`,
|
||||
`${mainRoute}_T?${encodeBase64(`${timetableRoute}_${schoolCode}_0_${nextWeek ? 2 : 1}`)}`,
|
||||
)
|
||||
.then((res) => res.body.text())
|
||||
const data = parseResponse(res)
|
||||
|
|
@ -88,21 +88,24 @@ export default class Comcigan {
|
|||
)
|
||||
}
|
||||
|
||||
async getTimetable(schoolCode: number): Promise<Timetable[][][][]>
|
||||
async getTimetable(schoolCode: number, nextWeek?: boolean): Promise<Timetable[][][][]>
|
||||
async getTimetable(
|
||||
schoolCode: number,
|
||||
grade: number,
|
||||
nextWeek?: boolean,
|
||||
): Promise<Timetable[][][]>
|
||||
async getTimetable(
|
||||
schoolCode: number,
|
||||
grade: number,
|
||||
cls: number,
|
||||
nextWeek?: boolean,
|
||||
): Promise<Timetable[][]>
|
||||
async getTimetable(
|
||||
schoolCode: number,
|
||||
grade: number,
|
||||
cls: number,
|
||||
day: number,
|
||||
nextWeek?: boolean,
|
||||
): Promise<Timetable[]>
|
||||
async getTimetable(
|
||||
schoolCode: number,
|
||||
|
|
@ -110,16 +113,46 @@ export default class Comcigan {
|
|||
cls: number,
|
||||
day: number,
|
||||
period: number,
|
||||
nextWeek?: boolean,
|
||||
): Promise<Timetable>
|
||||
/** 학교 코드를 이용해 학교 시간표를 불러옵니다. */
|
||||
async getTimetable(
|
||||
schoolCode: number,
|
||||
grade?: number,
|
||||
cls?: number,
|
||||
day?: number,
|
||||
period?: number,
|
||||
gradeOrNextWeek?: number | boolean,
|
||||
clsOrNextWeek?: number | boolean,
|
||||
dayOrNextWeek?: number | boolean,
|
||||
periodOrNextWeek?: number | boolean,
|
||||
nextWeek = false,
|
||||
) {
|
||||
const raw = await this.getRawTimetable(schoolCode)
|
||||
// Parse arguments
|
||||
let grade: number | undefined
|
||||
let cls: number | undefined
|
||||
let day: number | undefined
|
||||
let period: number | undefined
|
||||
let isNextWeek = nextWeek
|
||||
|
||||
if (typeof gradeOrNextWeek === 'boolean') {
|
||||
isNextWeek = gradeOrNextWeek
|
||||
} else {
|
||||
grade = gradeOrNextWeek
|
||||
if (typeof clsOrNextWeek === 'boolean') {
|
||||
isNextWeek = clsOrNextWeek
|
||||
} else {
|
||||
cls = clsOrNextWeek
|
||||
if (typeof dayOrNextWeek === 'boolean') {
|
||||
isNextWeek = dayOrNextWeek
|
||||
} else {
|
||||
day = dayOrNextWeek
|
||||
if (typeof periodOrNextWeek === 'boolean') {
|
||||
isNextWeek = periodOrNextWeek
|
||||
} else {
|
||||
period = periodOrNextWeek
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const raw = await this.getRawTimetable(schoolCode, isNextWeek)
|
||||
|
||||
if (grade === undefined) return raw
|
||||
if (cls === undefined) return raw[grade - 1]
|
||||
|
|
|
|||
|
|
@ -32,33 +32,64 @@ export default class School extends Fetcher implements ISchool {
|
|||
return res[0]
|
||||
}
|
||||
|
||||
async getTimetable(): Promise<Timetable[][][][]>
|
||||
async getTimetable(grade: number): Promise<Timetable[][][]>
|
||||
async getTimetable(grade: number, cls: number): Promise<Timetable[][]>
|
||||
async getTimetable(nextWeek?: boolean): Promise<Timetable[][][][]>
|
||||
async getTimetable(grade: number, nextWeek?: boolean): Promise<Timetable[][][]>
|
||||
async getTimetable(grade: number, cls: number, nextWeek?: boolean): Promise<Timetable[][]>
|
||||
async getTimetable(
|
||||
grade: number,
|
||||
cls: number,
|
||||
day: number,
|
||||
nextWeek?: boolean,
|
||||
): Promise<Timetable[]>
|
||||
async getTimetable(
|
||||
grade: number,
|
||||
cls: number,
|
||||
day: number,
|
||||
period: number,
|
||||
nextWeek?: boolean,
|
||||
): Promise<Timetable>
|
||||
/** 시간표를 불러옵니다. */
|
||||
async getTimetable(
|
||||
grade?: number,
|
||||
cls?: number,
|
||||
day?: number,
|
||||
period?: number,
|
||||
gradeOrNextWeek?: number | boolean,
|
||||
clsOrNextWeek?: number | boolean,
|
||||
dayOrNextWeek?: number | boolean,
|
||||
periodOrNextWeek?: number | boolean,
|
||||
nextWeek = false,
|
||||
) {
|
||||
if (grade === undefined) return this.client.getTimetable(this.code)
|
||||
if (cls === undefined) return this.client.getTimetable(this.code, grade)
|
||||
// Parse arguments
|
||||
let grade: number | undefined
|
||||
let cls: number | undefined
|
||||
let day: number | undefined
|
||||
let period: number | undefined
|
||||
let isNextWeek = nextWeek
|
||||
|
||||
if (typeof gradeOrNextWeek === 'boolean') {
|
||||
isNextWeek = gradeOrNextWeek
|
||||
} else {
|
||||
grade = gradeOrNextWeek
|
||||
if (typeof clsOrNextWeek === 'boolean') {
|
||||
isNextWeek = clsOrNextWeek
|
||||
} else {
|
||||
cls = clsOrNextWeek
|
||||
if (typeof dayOrNextWeek === 'boolean') {
|
||||
isNextWeek = dayOrNextWeek
|
||||
} else {
|
||||
day = dayOrNextWeek
|
||||
if (typeof periodOrNextWeek === 'boolean') {
|
||||
isNextWeek = periodOrNextWeek
|
||||
} else {
|
||||
period = periodOrNextWeek
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (grade === undefined) return this.client.getTimetable(this.code, isNextWeek)
|
||||
if (cls === undefined) return this.client.getTimetable(this.code, grade, isNextWeek)
|
||||
if (day === undefined)
|
||||
return this.client.getTimetable(this.code, grade, cls)
|
||||
return this.client.getTimetable(this.code, grade, cls, isNextWeek)
|
||||
if (period === undefined)
|
||||
return this.client.getTimetable(this.code, grade, cls, day)
|
||||
return this.client.getTimetable(this.code, grade, cls, day, period)
|
||||
return this.client.getTimetable(this.code, grade, cls, day, isNextWeek)
|
||||
return this.client.getTimetable(this.code, grade, cls, day, period, isNextWeek)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue