Рефакторинг: улучшение системы аутентификации и UI компонентов
- Удалены устаревшие файлы (mock.js, old-schedule.txt, loading-overlay.tsx) - Переработана система аутентификации (login, logout, check-auth) - Добавлен компонент toast для уведомлений - Улучшен контекст загрузки (loading-context) - Обновлен парсер расписания (schedule.ts) - Улучшена админ-панель - Обновлена документация (README.md) - Старые файлы перемещены в директорию old/
This commit is contained in:
64
old/old-schedule.txt
Normal file
64
old/old-schedule.txt
Normal file
@@ -0,0 +1,64 @@
|
||||
import { Day } from '@/shared/model/day'
|
||||
import { parsePage } from '@/app/parser/schedule'
|
||||
import contentTypeParser from 'content-type'
|
||||
import { JSDOM } from 'jsdom'
|
||||
// import { content as mockContent } from './mock'
|
||||
import { reportParserError } from '@/app/logger'
|
||||
// import { groups } from '@/shared/data/groups'
|
||||
|
||||
// const fetchingGroups: {
|
||||
// [groupID: number]: boolean
|
||||
// } = Object.fromEntries(Object.values(groups).map(([gId]) => [gId, false]))
|
||||
|
||||
// const callbacks: {
|
||||
// [groupID: number]: Set<{ resolve: (days: Day[]) => void, reject: (e: unknown) => void }>
|
||||
// } = Object.fromEntries(Object.values(groups).map(([gId]) => [gId, new Set()]))
|
||||
|
||||
export async function getSchedule(groupID: number, groupName: string): Promise<Day[]> {
|
||||
// if (fetchingGroups[groupID]) {
|
||||
// return new Promise((resolve, reject) => {
|
||||
// callbacks[groupID].add({
|
||||
// resolve: (days: Day[]) => resolve(days),
|
||||
// reject
|
||||
// })
|
||||
// })
|
||||
// } else {
|
||||
// fetchingGroups[groupID] = true
|
||||
// }
|
||||
|
||||
// try {
|
||||
// const result = await parseSchedule(groupID, groupName)
|
||||
// fetchingGroups[groupID] = false
|
||||
// Array.from(callbacks[groupID].values()).forEach(({ resolve }) => resolve(result))
|
||||
// callbacks[groupID].clear()
|
||||
// return result
|
||||
// } catch(e) {
|
||||
// fetchingGroups[groupID] = false
|
||||
// console.log(Array.from(callbacks[groupID].values()).length)
|
||||
// Array.from(callbacks[groupID].values()).forEach(({ reject }) => reject(e))
|
||||
// callbacks[groupID].clear()
|
||||
// throw e
|
||||
// }
|
||||
}
|
||||
|
||||
export async function parseSchedule(groupID: number, groupName: string) {
|
||||
const page = await fetch(`${process.env.PROXY_URL ?? 'https://lk.ks.psuti.ru'}/?mn=2&obj=${groupID}`)
|
||||
// const page = { text: async () => mockContent, status: 200, headers: { get: (s: string) => s && 'text/html' } }
|
||||
const content = await page.text()
|
||||
const contentType = page.headers.get('content-type')
|
||||
if (page.status === 200 && contentType && contentTypeParser.parse(contentType).type === 'text/html') {
|
||||
try {
|
||||
const root = new JSDOM(content).window.document
|
||||
return parsePage(root, groupName)
|
||||
} catch (e) {
|
||||
console.error('Error while parsing lk.ks.psuti.ru')
|
||||
reportParserError(new Date().toISOString(), 'Не удалось сделать парсинг для группы', groupName)
|
||||
throw e
|
||||
}
|
||||
} else {
|
||||
console.error(page.status, contentType)
|
||||
console.error(content.length > 500 ? content.slice(0, 500 - 3) + '...' : content)
|
||||
reportParserError(new Date().toISOString(), 'Не удалось получить страницу для группы', groupName)
|
||||
throw new Error('Error while fetching lk.ks.psuti.ru')
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user