diff --git a/bun.lock b/bun.lock index 7d0e3e7..fcfd8c3 100644 --- a/bun.lock +++ b/bun.lock @@ -1,5 +1,6 @@ { "lockfileVersion": 1, + "configVersion": 0, "workspaces": { "": { "name": "comcigan.ts", diff --git a/src/client.ts b/src/client.ts index 6986f20..1e2c1e4 100644 --- a/src/client.ts +++ b/src/client.ts @@ -37,6 +37,7 @@ export default class Comcigan { private async getRawTimetable( schoolCode: number, + nextWeek = false, ): Promise { 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 + async getTimetable(schoolCode: number, nextWeek?: boolean): Promise async getTimetable( schoolCode: number, grade: number, + nextWeek?: boolean, ): Promise async getTimetable( schoolCode: number, grade: number, cls: number, + nextWeek?: boolean, ): Promise async getTimetable( schoolCode: number, grade: number, cls: number, day: number, + nextWeek?: boolean, ): Promise async getTimetable( schoolCode: number, @@ -110,16 +113,46 @@ export default class Comcigan { cls: number, day: number, period: number, + nextWeek?: boolean, ): Promise /** 학교 코드를 이용해 학교 시간표를 불러옵니다. */ 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] diff --git a/src/models/School.ts b/src/models/School.ts index a787c2b..f827c57 100644 --- a/src/models/School.ts +++ b/src/models/School.ts @@ -32,33 +32,64 @@ export default class School extends Fetcher implements ISchool { return res[0] } - async getTimetable(): Promise - async getTimetable(grade: number): Promise - async getTimetable(grade: number, cls: number): Promise + async getTimetable(nextWeek?: boolean): Promise + async getTimetable(grade: number, nextWeek?: boolean): Promise + async getTimetable(grade: number, cls: number, nextWeek?: boolean): Promise async getTimetable( grade: number, cls: number, day: number, + nextWeek?: boolean, ): Promise async getTimetable( grade: number, cls: number, day: number, period: number, + nextWeek?: boolean, ): Promise /** 시간표를 불러옵니다. */ 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) } }