2.7 KiB
2.7 KiB
Архитектура Frontend-клиента (Next.js 14)
1. Базовые принципы
- Стек: Next.js 14 (App Router), React 18, TypeScript, Tailwind CSS.
- UI/UX: Темная тема (
#121212), акцентный цвет#E32636. Иконки — строгоlucide-react. - Компоненты: Никакого кастомного CSS. Только утилитные классы Tailwind.
2. Управление состоянием (State Management)
- Глобальный стейт (Zustand):
authStore: Хранит JWT-токен и данные профиля. Обязательно использовать persist middleware (хранить в localStorage).cartStore: Хранит выбранные места (CartSeatсticketId). ЗАПРЕЩЕНО использовать persist. Корзина живет только в памяти страницы, так как лок места на бэкенде временный (TTL в Redis).
3. Работа с API и Сетью (КРИТИЧЕСКИ ВАЖНО)
- Базовый URL: ЗАПРЕЩЕНО хардкодить
localhostили прямые IP в исходном коде. Всегда использоватьprocess.env.NEXT_PUBLIC_API_URLс фоллбэком. - Клиент: Axios инстанс (
src/api/client.ts). - Авторизация: Интерсептор автоматически добавляет
Authorization: Bearer <token>изauthStore. - Обработка ошибок: Все вызовы API оборачивать в
try/catch. Бизнес-ошибки (например, 409 Conflict) обрабатывать локально с показом Toast-уведомлений.
4. Структура директорий
src/app/— Роутинг (Pages, Layouts).src/components/— Переиспользуемые UI компоненты.src/api/— API-клиенты и типизация ответов бэкенда.src/store/— Zustand-хранилища.
5. Интерактивность и Навигация (КРИТИЧЕСКИ ВАЖНО)
- ЗАПРЕЩЕНО создавать "мертвые" кнопки навигации.
- Любой элемент UI, который визуально выглядит как кнопка перехода на другую страницу, ОБЯЗАН быть обернут в компонент
<Link href="...">изnext/linkили иметь обработчикonClick={() => router.push('...')}. - Если для кнопки пока нет API (например, Apple Wallet), она должна выводить
toast("Функция в разработке").