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,
|
"lockfileVersion": 1,
|
||||||
|
"configVersion": 0,
|
||||||
"workspaces": {
|
"workspaces": {
|
||||||
"": {
|
"": {
|
||||||
"name": "comcigan.ts",
|
"name": "comcigan.ts",
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ export default class Comcigan {
|
||||||
|
|
||||||
private async getRawTimetable(
|
private async getRawTimetable(
|
||||||
schoolCode: number,
|
schoolCode: number,
|
||||||
|
nextWeek = false,
|
||||||
): Promise<Timetable[][][][]> {
|
): Promise<Timetable[][][][]> {
|
||||||
const {
|
const {
|
||||||
mainRoute,
|
mainRoute,
|
||||||
|
|
@ -45,11 +46,10 @@ export default class Comcigan {
|
||||||
originalCode,
|
originalCode,
|
||||||
dayCode,
|
dayCode,
|
||||||
subjectCode,
|
subjectCode,
|
||||||
nextWeek,
|
|
||||||
} = await this.dataManager.getData()
|
} = await this.dataManager.getData()
|
||||||
const res = await this.http
|
const res = await this.http
|
||||||
.get(
|
.get(
|
||||||
`${mainRoute}_T?${encodeBase64(`${timetableRoute}_${schoolCode}_0_${nextWeek ? 2 : 1}`)}`,
|
`${mainRoute}_T?${encodeBase64(`${timetableRoute}_${schoolCode}_0_${nextWeek ? 2 : 1}`)}`,
|
||||||
)
|
)
|
||||||
.then((res) => res.body.text())
|
.then((res) => res.body.text())
|
||||||
const data = parseResponse(res)
|
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(
|
async getTimetable(
|
||||||
schoolCode: number,
|
schoolCode: number,
|
||||||
grade: number,
|
grade: number,
|
||||||
|
nextWeek?: boolean,
|
||||||
): Promise<Timetable[][][]>
|
): Promise<Timetable[][][]>
|
||||||
async getTimetable(
|
async getTimetable(
|
||||||
schoolCode: number,
|
schoolCode: number,
|
||||||
grade: number,
|
grade: number,
|
||||||
cls: number,
|
cls: number,
|
||||||
|
nextWeek?: boolean,
|
||||||
): Promise<Timetable[][]>
|
): Promise<Timetable[][]>
|
||||||
async getTimetable(
|
async getTimetable(
|
||||||
schoolCode: number,
|
schoolCode: number,
|
||||||
grade: number,
|
grade: number,
|
||||||
cls: number,
|
cls: number,
|
||||||
day: number,
|
day: number,
|
||||||
|
nextWeek?: boolean,
|
||||||
): Promise<Timetable[]>
|
): Promise<Timetable[]>
|
||||||
async getTimetable(
|
async getTimetable(
|
||||||
schoolCode: number,
|
schoolCode: number,
|
||||||
|
|
@ -110,16 +113,46 @@ export default class Comcigan {
|
||||||
cls: number,
|
cls: number,
|
||||||
day: number,
|
day: number,
|
||||||
period: number,
|
period: number,
|
||||||
|
nextWeek?: boolean,
|
||||||
): Promise<Timetable>
|
): Promise<Timetable>
|
||||||
/** 학교 코드를 이용해 학교 시간표를 불러옵니다. */
|
/** 학교 코드를 이용해 학교 시간표를 불러옵니다. */
|
||||||
async getTimetable(
|
async getTimetable(
|
||||||
schoolCode: number,
|
schoolCode: number,
|
||||||
grade?: number,
|
gradeOrNextWeek?: number | boolean,
|
||||||
cls?: number,
|
clsOrNextWeek?: number | boolean,
|
||||||
day?: number,
|
dayOrNextWeek?: number | boolean,
|
||||||
period?: number,
|
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 (grade === undefined) return raw
|
||||||
if (cls === undefined) return raw[grade - 1]
|
if (cls === undefined) return raw[grade - 1]
|
||||||
|
|
|
||||||
|
|
@ -32,33 +32,64 @@ export default class School extends Fetcher implements ISchool {
|
||||||
return res[0]
|
return res[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
async getTimetable(): Promise<Timetable[][][][]>
|
async getTimetable(nextWeek?: boolean): Promise<Timetable[][][][]>
|
||||||
async getTimetable(grade: number): Promise<Timetable[][][]>
|
async getTimetable(grade: number, nextWeek?: boolean): Promise<Timetable[][][]>
|
||||||
async getTimetable(grade: number, cls: number): Promise<Timetable[][]>
|
async getTimetable(grade: number, cls: number, nextWeek?: boolean): Promise<Timetable[][]>
|
||||||
async getTimetable(
|
async getTimetable(
|
||||||
grade: number,
|
grade: number,
|
||||||
cls: number,
|
cls: number,
|
||||||
day: number,
|
day: number,
|
||||||
|
nextWeek?: boolean,
|
||||||
): Promise<Timetable[]>
|
): Promise<Timetable[]>
|
||||||
async getTimetable(
|
async getTimetable(
|
||||||
grade: number,
|
grade: number,
|
||||||
cls: number,
|
cls: number,
|
||||||
day: number,
|
day: number,
|
||||||
period: number,
|
period: number,
|
||||||
|
nextWeek?: boolean,
|
||||||
): Promise<Timetable>
|
): Promise<Timetable>
|
||||||
/** 시간표를 불러옵니다. */
|
/** 시간표를 불러옵니다. */
|
||||||
async getTimetable(
|
async getTimetable(
|
||||||
grade?: number,
|
gradeOrNextWeek?: number | boolean,
|
||||||
cls?: number,
|
clsOrNextWeek?: number | boolean,
|
||||||
day?: number,
|
dayOrNextWeek?: number | boolean,
|
||||||
period?: number,
|
periodOrNextWeek?: number | boolean,
|
||||||
|
nextWeek = false,
|
||||||
) {
|
) {
|
||||||
if (grade === undefined) return this.client.getTimetable(this.code)
|
// Parse arguments
|
||||||
if (cls === undefined) return this.client.getTimetable(this.code, grade)
|
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)
|
if (day === undefined)
|
||||||
return this.client.getTimetable(this.code, grade, cls)
|
return this.client.getTimetable(this.code, grade, cls, isNextWeek)
|
||||||
if (period === undefined)
|
if (period === undefined)
|
||||||
return this.client.getTimetable(this.code, grade, cls, day)
|
return this.client.getTimetable(this.code, grade, cls, day, isNextWeek)
|
||||||
return this.client.getTimetable(this.code, grade, cls, day, period)
|
return this.client.getTimetable(this.code, grade, cls, day, period, isNextWeek)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue