Refactor timetable retrieval methods to include nextWeek parameter for better flexibility

This commit is contained in:
암냥 2025-11-28 11:15:40 +09:00
commit 49221af280
3 changed files with 85 additions and 20 deletions

View file

@ -1,5 +1,6 @@
{ {
"lockfileVersion": 1, "lockfileVersion": 1,
"configVersion": 0,
"workspaces": { "workspaces": {
"": { "": {
"name": "comcigan.ts", "name": "comcigan.ts",

View file

@ -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,7 +46,6 @@ 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(
@ -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]

View file

@ -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)
} }
} }