Sergey Krylov 1b6fd39be3
Some checks failed
CI / ci (pull_request) Failing after 2m55s
CI / ci (push) Failing after 2m53s
feat: add frontend infrastructure libraries (ky, Zustand, MUI, dayjs, clsx, tanstack-table, rhf, zod)
- install ky, zustand, @mui/material, @fontsource/roboto, dayjs, clsx
- install @tanstack/react-table, react-hook-form, zod, @hookform/resolvers
- create kyClient.ts with auth interceptors
- create Zustand store for session (useSessionStore.ts)
- add MUI theming (theme.ts, ThemeProvider in AppProviders)
- add dayjs utils with ru locale (formatDate, formatRelative)
- add clsx cn() utility
- add base Table component using @tanstack/react-table
- create ADR-015 documenting architectural decisions
- create SDD artifacts: spec.md, plan.md, tasks.md
- build, lint, and 111 tests passing
2026-06-21 08:26:27 +03:00

52 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# spec.md - Фронтенд Инфраструктура - Современный стек
## Цель
Перевести инфраструктуру фронтенда MoexVibe на современный, надежный стек современных JavaScript/TypeScript библиотек, объединяющих в себе возможность развиваться и масштабироваться без технического долга.
## Область применения
Этот проект охватывает фундаментальный слой всех фронтенд-сервисов — все компонеты, формы, API-оболочки, работу с данными и UI-паттерны. Он лежит в основе каждого виджета, панели и пользовательского маршрута.
## Реквизиты
### Требования
1. **📦 Базовый HTTP-клиент** — современный HTTP-клиент с поддержкой автоматического повторного запроса на авторизацию и интерцепторов
2. **⚡ Управление состоянием** — реактивная stores архитектура для авторизации и глобальных конфигураций приложения
3. **🎨 Компонентная библиотека** — Material-UI компоненты на основе CSS-переменных, адаптированные к существующему дизайну
4. **📅 Работа с датами** — миниатюрная библиотека форматирования дат, соответствующая русскоязычной локализации
5. **🧪 Валидация форм** — типобезопасная библиотека форм с серверной валидацией
6. **🧑‍💼 Утилита для классов** — чистая, функциональная утилита для комбинирования CSS-классов
7. **📋 Таблицы** — высокоуровневый хуковный заново введенный реактивный набор инструментов для работы с данными в таблицах
### Ограничения
- Должна поддерживаться существующая архитектура FSD и все текущие поверхности API
- Следует соблюдать обратную совместимость на уровне экспорта (т.е. утилитарные функции точно заменят существующие шаблоны, API-оболочка `request()` может быть сохранена под капотом)
- Предпочтителен код, дружественный к TypeScript, и четко разделенные слои в рамках FSD
- Нет изменений в архитектуре других слоев бэкенда (бэкенд предоставит необходимые DTO, спецификации API не будут изменены)
## Приемлемость
**Встраиваемость** — библиотеки small-затратные и не требуют переписывания больших частей кода
**Управляемость** — архитектура позволяет поддерживать и тестировать каждый слой независимо
**Совместимость** — используется с новой Rust-векторной архитектурой бэкенда, собранной в рамках проекта
## Минимальная жизнеспособность / критерии приемки
- [ ] HTTP-клиент поддерживает GET, POST, PUT, DELETE, корректно перехватывает 401 и обновляет токен
- [ ] Хранилище данных Zustand обеспечивает complete состояние авторизации и отслеживает флаг монтирования
- [ ] MUI интегрирована с существующими CSS-переменными, поддерживает light/dark темы и темную тему по умолчанию, используется в примере формы (login/register)
- [ ] dayjs правильно форматирует дату согласно шаблону 'DD.MM.YYYY' и поддерживает русскоязычную локализацию
- [ ] Валидация форм ловит ошибки в реальном времени, отображает сообщения в правой части поля и заблокирует отправку при наличии ошибок
- [ ] Утилита clsx работает идентично существующим шаблонам связывания классов, поддерживает 2+ значения
- [ ] Таблица автоматически сортируется, пагинируется и фильтруется через TanStack Query и реализует переиспользуемый переиспользуемый компонент `tanstack-react-table`
- [ ] Все единицы измерения полностью покрыты тестами (используются существующие шаблоны тестирования)
- [ ] Сборка проходи успешно (`npm run build`), линтер проходит (`npm run lint`)
## Архитектурные инварианты
- Разделение слоев FSD остается неизменным (app, pages, widgets, features, entities, shared)
- Заключение: только усовершенствование реализации, без изменений контрактов API
- Преемственность UI-паттернов должна быть реализована между существующими компонентами и новыми шаблонами
- Тесты оказываются вдоль с соответствующим кодом без снятия состояния из памяти
- Отсутствие логических ошибок (в том числе рандомной, SR-CLP и страхования от утечек SSR)