Аудитории: фильтры по типу, вместимости и оснащению + режим «свободные на паре»
Бэкенд: - parse_rooms_info разбирает описание аудитории (формат «тип; оснащение; N мест») в атрибуты: type (фразой как в таблице), capacity (места, а для компьютерных классов — рабочие места; null, если данных нет), equipment (ПК, Проектор, Интерактивная панель, Телевизор, Маркер, Меловая доска) и available_days («402 четверг пятница»); «без проектора» трактуется как отсутствие; - /rooms-day и /rooms-free отдают атрибуты (room_payload); аудитории с ограничением по дням не предлагаются в /rooms-free в остальные дни. Фронтенд (вкладка «Аудитории»): - панель фильтров: тип (значения из данных таблицы), «мест не меньше», оснащение чекбоксами с выбором условия «все (И)» / «любое (ИЛИ)»; - счётчик «Показано N из M» и пояснения: сколько аудиторий скрыто из-за отсутствия данных о вместимости, сколько доступны только по отдельным дням; - переключатель «Занятость за день» / «Свободные на паре» (с выбором пары) — вместе с фильтрами это «свободная аудитория на 30 человек с проектором в 3-ю пару»; выбранные фильтры запоминаются в браузере; - в карточке аудитории видны разобранные атрибуты и пометки из таблицы. Тесты: разбор всех форматов описаний (включая отрицания и меловую доску), API атрибутов и учёта доступных дней. Всего 159.
This commit is contained in:
23
README.md
23
README.md
@@ -413,6 +413,16 @@ tests/
|
||||
- Длинные ссылки в карточке переносятся по служебным символам и каждые
|
||||
24 символа (`<wbr>`), поэтому карточка не вылезает за экран даже в старых
|
||||
браузерах, где нет `overflow-wrap`.
|
||||
- На вкладке «Аудитории» есть фильтры: **тип** (фразой, как в таблице),
|
||||
**вместимость** («не меньше N мест») и **оснащение** чекбоксами с выбором
|
||||
условия «все выбранные (И)» или «любое из выбранных (ИЛИ)». Выбранное
|
||||
запоминается в браузере, под списком видно «Показано N из M» и пояснения:
|
||||
сколько аудиторий скрыто из-за отсутствия данных о вместимости и какие
|
||||
доступны только по отдельным дням.
|
||||
- Там же переключатель «Занятость за день» / **«Свободные на паре»**: во
|
||||
втором режиме выбирается пара и показываются только свободные аудитории —
|
||||
вместе с фильтрами получается «свободная аудитория на 30 человек с
|
||||
проектором в 3-ю пару».
|
||||
- Приложение можно «установить» на главный экран (манифест + service
|
||||
worker + иконки приложения); на iOS иконку берёт `apple-touch-icon`.
|
||||
|
||||
@@ -430,12 +440,21 @@ tests/
|
||||
| GET | `/teacher/{name}` | расписание преподавателя (+ `full_name`) |
|
||||
| GET | `/rooms` | список аудиторий (занятые ∪ лист «аудитории») |
|
||||
| GET | `/room/{label}` | занятость аудитории |
|
||||
| GET | `/rooms-day?day={день}` | занятость всех аудиторий за день |
|
||||
| GET | `/rooms-free?day={день}&period={N}` | свободные аудитории |
|
||||
| GET | `/rooms-day?day={день}` | занятость всех аудиторий за день (+ атрибуты) |
|
||||
| GET | `/rooms-free?day={день}&period={N}` | свободные аудитории (+ атрибуты) |
|
||||
| GET | `/week` | недели семестра и текущая чётность |
|
||||
| GET | `/status` | состояние кэша (`last_updated`, `table_modified`, `error`, …) |
|
||||
| GET | `/healthz` | живость процесса (не обращается к таблице) |
|
||||
|
||||
В ответах `rooms-day` и `rooms-free` по каждой аудитории, кроме `room` и `info`
|
||||
(описание как в таблице), идут разобранные атрибуты: `type` (тип фразой из
|
||||
таблицы: «комп.класс», «кабинет английского», «лекционная»…), `capacity`
|
||||
(мест; для компьютерных классов — рабочие места; `null`, если в таблице нет
|
||||
данных), `equipment` (список: «ПК», «Проектор», «Интерактивная панель»,
|
||||
«Телевизор», «Маркер», «Меловая доска») и `available_days` (дни, если в
|
||||
описании указано «только четверг, пятница»). Аудитории с ограничением по дням
|
||||
не попадают в `/rooms-free` для остальных дней.
|
||||
|
||||
Фронт проксирует только то, что использует, под префиксом `/api/...`:
|
||||
`groups`, `schedule/{group}`, `teachers`, `teacher/{name}`, `rooms`,
|
||||
`room/{label}`, `rooms-day`, `rooms-free`, `week`, `status`.
|
||||
|
||||
Reference in New Issue
Block a user