feat: interactive School class
This commit is contained in:
parent
27874fad37
commit
1671dda26e
6 changed files with 130 additions and 43 deletions
|
|
@ -1,8 +1,7 @@
|
|||
import { BASE_URL, USER_AGENT } from './constants'
|
||||
import DataManager from './data'
|
||||
import type { School } from './models/School'
|
||||
import type { Timetable } from './models/Timetable'
|
||||
import { TimetableManager } from './models/Timetable'
|
||||
import School from './models/School'
|
||||
import type Timetable from './models/Timetable'
|
||||
import { encodeBase64, encodeEUCKR } from './utils/encode'
|
||||
import { log10int } from './utils/math'
|
||||
import { parseResponse } from './utils/parse'
|
||||
|
|
@ -28,17 +27,27 @@ export default class Comcigan {
|
|||
학교검색: [number, string, string, number][]
|
||||
}>(res.data)
|
||||
|
||||
return data.map(([regionCode, regionName, schoolName, schoolCode]) => ({
|
||||
code: schoolCode,
|
||||
name: schoolName,
|
||||
region: { code: regionCode, name: regionName },
|
||||
}))
|
||||
return data.map(
|
||||
([regionCode, regionName, schoolName, schoolCode]) =>
|
||||
new School(this, {
|
||||
code: schoolCode,
|
||||
name: schoolName,
|
||||
region: { code: regionCode, name: regionName },
|
||||
}),
|
||||
)
|
||||
}
|
||||
|
||||
/** 학교 코드를 이용해 학교 시간표를 불러옵니다. */
|
||||
async getRawTimetable(schoolCode: number): Promise<Timetable[][][][]> {
|
||||
const { mainRoute, timetableRoute, teacherCode, dayCode, subjectCode } =
|
||||
await this.dataManager.getData()
|
||||
private async getRawTimetable(
|
||||
schoolCode: number,
|
||||
): Promise<Timetable[][][][]> {
|
||||
const {
|
||||
mainRoute,
|
||||
timetableRoute,
|
||||
teacherCode,
|
||||
originalCode,
|
||||
dayCode,
|
||||
subjectCode,
|
||||
} = await this.dataManager.getData()
|
||||
const res = await this.rest.get(
|
||||
`${mainRoute}_T?${encodeBase64(`${timetableRoute}_${schoolCode}_0_1`)}`,
|
||||
)
|
||||
|
|
@ -64,8 +73,43 @@ export default class Comcigan {
|
|||
)
|
||||
}
|
||||
|
||||
/** 학교 코드를 이용해 학교 시간표를 불러오고, `TimetableManager`로 변환해 사용할 수 있는 형태로 제공합니다. */
|
||||
async getTimetable(schoolCode: number) {
|
||||
return new TimetableManager(await this.getRawTimetable(schoolCode))
|
||||
async getTimetable(schoolCode: number): Promise<Timetable[][][][]>
|
||||
async getTimetable(
|
||||
schoolCode: number,
|
||||
grade: number,
|
||||
): Promise<Timetable[][][]>
|
||||
async getTimetable(
|
||||
schoolCode: number,
|
||||
grade: number,
|
||||
cls: number,
|
||||
): Promise<Timetable[][]>
|
||||
async getTimetable(
|
||||
schoolCode: number,
|
||||
grade: number,
|
||||
cls: number,
|
||||
day: number,
|
||||
): Promise<Timetable[]>
|
||||
async getTimetable(
|
||||
schoolCode: number,
|
||||
grade: number,
|
||||
cls: number,
|
||||
day: number,
|
||||
period: number,
|
||||
): Promise<Timetable>
|
||||
/** 학교 코드를 이용해 학교 시간표를 불러옵니다. */
|
||||
async getTimetable(
|
||||
schoolCode: number,
|
||||
grade?: number,
|
||||
cls?: number,
|
||||
day?: number,
|
||||
period?: number,
|
||||
) {
|
||||
const raw = await this.getRawTimetable(schoolCode)
|
||||
|
||||
if (grade === undefined) return raw
|
||||
if (cls === undefined) return raw[grade - 1]
|
||||
if (day === undefined) return raw[grade - 1][cls - 1]
|
||||
if (period === undefined) return raw[grade - 1][cls - 1][day - 1]
|
||||
return raw[grade - 1][cls - 1][day - 1][period - 1]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue