Root cause of search not working: globalThis.fetch stored as a class field loses its Window binding, causing 'Illegal invocation'. Fixed with fetch.bind(globalThis). Also fix calendar days endpoint date format from yyyyMMdd to yyyy-MM-ddT00:00:00 matching Angular's ApiFormatterService.
16 KiB
Пользовательские истории: Индекс и обзор
✅ ВЕРИФИЦИРОВАНО: Только реально реализованные функции Angular
Дата последнего обновления: 15 апреля 2026 GMT+3
Статус: Верифицировано v4.1 — полный аудит Angular-кода, добавлены пропущенные функции
Источник верификации: ClientApp/ (Angular 12.2.13)
Итоги аудита (Версия 4.0):
- 175 → 85 историй (удалено 90, или ~51%)
- 14 → 7 документов (удалено 4 документа полностью + 1 устаревший индекс)
- 100% оставшихся историй имеют подтверждение в исходном коде Angular
📌 Изменения в версии 4.0
Удалены документы (нереализованные функции)
- ❌ Документ 8: Многолётные рейсы (US-106-120) — кроме базового отображения, всё гипотетика (трансфер услуги, переадресация багажа, риски пересадок). Базовый показ stay в Doc 4 (US-42).
- ❌ Документ 10: Производительность (US-136-150) — Service Worker, A/B тесты, Web Workers, виртуализация — ничего нет в коде. Только базовый CacheService 30s.
- ❌ Документ 11: Продвинутые функции (US-151-165) — конвертация валют, RTL, лояльность, IATA-поиск — не реализовано. Многоязычность уже описана в Doc 1 US-2.
- ❌ Документ 12: Граничные случаи целостности (US-166-175) — кросс-таб синхронизация, восстановление сессии, rollback — ничего нет.
Удалённые истории внутри сохранённых документов
- Doc 2: US-21 (обработка ошибок сети) — нет UI обработки ошибок API
- Doc 3: US-34 (кнопка "Очистить") — нет такой кнопки в форме
- Doc 4: US-40, US-41 (перенесены в Doc 5), US-43 (фильтр по авиакомпании), US-44 (кнопка "Купить билет"), US-45 (живые обновления статусов в расписании)
- Doc 5: US-57 (ограничения полёта), US-58 (рецензии), US-59 (исторические данные), US-60 (сравнение рейсов), US-61 (Print version)
- Doc 6: US-77 (кластеризация), US-78 (выделение результатов), US-80 (топ маршруты), US-81 (легенда), US-82 (центральный офис), US-83 (ночной режим), US-84 (мобильная карта)
- Doc 7: US-87 (Service Worker offline), US-97 (WCAG проверка контраста), US-105 (session timeout)
Удалён устаревший файл
- ❌
USER_STORIES_VERIFIED_INDEX.md— содержал устаревшие данные о 175 историях
Обзор проекта
Это набор пользовательских историй для UI Dashboard — React-версии онлайн доски полётов Аэрофлота. Документы организованы по функциональным областям и содержат описание целей, путей клиента и критериев приёмки.
Всего историй: 89 пользовательских историй ✅ Документов: 7 Источник: Angular 12.2.13 (Aeroflot.Flights.Web/ClientApp) Языки: 9 (ru-ru, en-us, zh-cn, ko-kr, ja-jp, de-de, fr-fr, es-es, it-it)
Структура документов
📄 Документ 1: Навигация и элементы интерфейса
US-1 до US-11 (11 историй)
- US-1: Переключение между вкладками (Онлайн-Табло, Расписание, Карта полётов)
- US-2: Переключение языка интерфейса (9 языков)
- US-3: Хлебные крошки
- US-4: Кнопка обратной связи
- US-5: Кнопка прокрутки к началу
- US-6: Боковая панель с фильтрами
- US-7: Популярные запросы (popular-requests)
- US-8: История поиска (in-memory)
- US-9: Локализация заголовков и мета-тегов
- US-10: Адаптивный дизайн
- US-11: Отсутствие ошибок в консоли
📄 Документ 2: Онлайн доска полётов
US-12 до US-22 (без US-21) — 10 историй
- US-12: Поиск по номеру рейса (SU 1402)
- US-13: Выбор даты для поиска
- US-14: Поиск по городу отправления (с автодополнением)
- US-15: Поиск полётов с прибытием в город
- US-16: Поиск маршрута (А → Б)
- US-17: День вылета (переключение)
- US-18: Фильтр по времени вылета/прибытия
- US-19: Расширенный просмотр рейса
- US-20: Обработка пустых результатов
- US-22: Индикатор загрузки
📄 Документ 3: Поиск расписания полётов
US-23 до US-33 — 11 историй
- US-23: Переход на вкладку "Расписание"
- US-24: Ввод города отправления
- US-25: Ввод города прибытия
- US-26: Кнопка "Обменять"
- US-27: Выбор недели вылета
- US-28: Поиск туров (туда и обратно)
- US-29: Фильтр "Только прямые рейсы"
- US-30: Фильтр по времени вылета
- US-31: Фильтр по времени прибытия
- US-32: Проверка валидности параметров
- US-33: URL параметры расписания
📄 Документ 4: Результаты расписания
US-35 до US-46 (без US-43, 44, 45; US-40, 41 в Doc 5) — 7 историй
- US-35: Страница результатов расписания
- US-36: Переключение между днями
- US-37: Навигация между неделями (week-tabs)
- US-38: Расширенный просмотр полёта
- US-39: Сортировка результатов (6 режимов)
- US-42: Многоугольные полёты (рейсы с пересадками)
- US-46: Кнопка "Назад" на странице деталей
📄 Документ 5: Детали полёта
US-40, US-41, US-47 до US-56, US-62, US-63, US-64 — 15 историй
- US-40: Услуги на борту
- US-41: Расписание полёта и время
- US-47: Страница деталей полёта
- US-48: Основная информация о полёте
- US-49: Статус и детали статуса
- US-50: Информация о воздушном судне
- US-51: Информация об авиакомпании (operator-logo)
- US-52: Информация об аэропортах (station)
- US-53: Дни работы рейса
- US-54: Действия с полётом (купить, регистрация, печать, поделиться)
- US-55: Схема маршрута / timeline
- US-56: Информация о пересадках
- US-62: Поделиться информацией
- US-63: Отсутствие ошибок на странице
- US-64: Целостность данных
📄 Документ 6: Карта полётов
US-65 до US-79 (без US-77, 78) — 13 историй
- US-65: Переход на вкладку "Карта полётов"
- US-66: Отображение маршрутов на карте (Leaflet polyline)
- US-67: Выбор города отправления (city-autocomplete)
- US-68: Выбор города прибытия
- US-69: Обмен городов
- US-70: Выбор даты
- US-71: Фильтр "Внутренние рейсы" (toggle-switch)
- US-72: Фильтр "Международные рейсы"
- US-73: Фильтр "Соединительные рейсы"
- US-74: Зуммирование (Leaflet defaults, zoom 3-6)
- US-75: Панорамирование (Leaflet defaults, maxBounds)
- US-76: Popup при выборе маршрута
- US-79: Ссылка "Купить билет" (внешняя)
📄 Документ 7: Обработка ошибок и доступность
US-85 до US-108 (без US-87, 97) — 22 истории
Ошибки:
- US-85: Ошибка 404
- US-86: Ошибка 500
- US-88: Timeout при загрузке
- US-89: Некорректный ввод
- US-90: Невалидная комбинация параметров
Граничные случаи:
- US-91: Пустой результат поиска
- US-92: Unicode символы
- US-93: Очень длинные имена
- US-94: Быстрая последовательность поисков
Доступность:
- US-95: Клавиатурная навигация (PrimeNG defaults)
- US-96: ARIA-метки
- US-98: Focus visible
- US-99: Масштабирование текста
- US-100: Сенсорная навигация
Состояние и кэш:
- US-101: Персистентное состояние (StateService)
- US-102: История браузера
- US-103: Обработка больших объёмов
- US-104: Кэширование (CacheService, 30s)
Real-time и инфраструктура (добавлено в v4.1):
- US-105: Обновление данных в реальном времени (SignalR + FadeService)
- US-106: Встроенный чат-бот
- US-107: Canonical URL и SEO мета-теги по страницам
- US-108: Отображение версии API (debug-режим)
Статистика
| Документ | Диапазон | Историй | Статус |
|---|---|---|---|
| 1. Навигация | US-1 до US-11 | 11 | ✅ Все реализованы |
| 2. Онлайн-Табло | US-12 до US-22 | 10 | ✅ Все реализованы |
| 3. Поиск расписания | US-23 до US-33 | 11 | ✅ Все реализованы |
| 4. Результаты расписания | US-35-39, 42, 46 | 7 | ✅ Все реализованы |
| 5. Детали полёта | US-40, 41, 47-56, 62-64 | 15 | ✅ Все реализованы |
| 6. Карта полётов | US-65-76, 79 | 13 | ✅ Все реализованы |
| 7. Ошибки и доступность | US-85-86, 88-96, 98-104, 105-108 | 22 | ✅ Все реализованы |
| ИТОГО | 89 историй | 89 | ✅ Полностью верифицировано |
Удалённые документы и истории
Полностью удалённые документы
| Документ | Историй | Причина |
|---|---|---|
| 8. Многолётные рейсы (US-106-120) | 15 | Только базовый показ работает (см. Doc 4 US-42) |
| 10. Производительность (US-136-150) | 15 | Service Worker, A/B, Web Workers — нет в коде |
| 11. Продвинутые функции (US-151-165) | 15 | Валюта, лояльность, RTL, IATA-поиск — нет |
| 12. Граничные случаи (US-166-175) | 10 | Кросс-таб синхронизация, recovery — нет |
| Всего удалено | 55 |
Удалённые истории внутри сохранённых документов
| Doc | Удалено | Причина |
|---|---|---|
| 2 | US-21 | Нет UI обработки сетевых ошибок |
| 3 | US-34 | Нет кнопки "Очистить" в форме |
| 4 | US-43,44,45 | Нет фильтра по авиакомпании, кнопки "Купить", live-обновлений |
| 5 | US-57-61 | Нет ограничений, рецензий, истории, сравнения, print-версии |
| 6 | US-77,78,80-84 | Нет кластеризации, выделения, легенды, ночного режима, моб. |
| 7 | US-87,97,105 | Нет Service Worker, WCAG-проверки контраста, session timeout |
| Всего | 35 |
Источник верификации
Каждая оставшаяся история подтверждена в исходном коде по следующим путям:
ClientApp/src/app/features/online-board/— Doc 2ClientApp/src/app/features/schedule/— Docs 3, 4ClientApp/src/app/features/flights-map/— Doc 6ClientApp/src/app/features/popular-requests/— Doc 1 US-7ClientApp/src/app/modules/pages/details/— Doc 5ClientApp/src/app/components/(city-autocomplete, dates-selectors, breadcrumds, search-history, page) — Doc 1, общиеClientApp/src/app/shared/services/(localization, state, cache) — Doc 1, Doc 7ClientApp/src/app/modules/pages/error-pages/— Doc 7
Управление версиями
| Версия | Дата | Историй | Документов | Примечания |
|---|---|---|---|---|
| 1.0 | Feb 2026 | 103 | 7 | Начальная версия |
| 1.4 | Mar 2026 | 103 | 7 | Исправления, восстановлены US-40, US-41 |
| 2.0 | Apr 2026 | 210 | 14 | Расширение (многолётные, история, производительность) |
| 3.0 | Apr 2026 | 175 | 11 | Удалены удалённые: история, уведомления, аккаунты |
| 4.0 | Apr 9 2026 | 85 | 7 | Кодовая верификация: удалено всё неподтверждённое |
| 4.1 | Apr 15 2026 | 89 | 7 | Повторная верификация: +4 истории (SignalR, чат-бот, SEO, debug), обновлены тултипы, календарь, автодополнение, код-шеринг |