Update project 7 FRONT UI -> API -> DB -> RabbitMQ -> Worker -> MinIO

This commit is contained in:
2026-03-06 13:18:32 +00:00
parent a418c53664
commit 8de0a1e7db
7 changed files with 408 additions and 19 deletions

View File

@@ -2,23 +2,22 @@
## 1. Базовые принципы
- **Стек:** Next.js 14 (App Router), React 18, TypeScript, Tailwind CSS.
- **UI/UX:** Темная тема (`#121212`), акцентный цвет `#E32636` (красный неон). Иконки — строго `lucide-react`.
- **Компоненты:** Никакого кастомного CSS. Используем только утилитные классы Tailwind. Если нужен сложный компонент (модалка, селект) — используем паттерны `shadcn/ui`.
- **UI/UX:** Темная тема (`#121212`), акцентный цвет `#E32636`. Иконки — строго `lucide-react`.
- **Компоненты:** Никакого кастомного CSS. Только утилитные классы Tailwind.
## 2. Управление состоянием (State Management)
- **Локальный стейт:** `useState` / `useReducer` для состояния UI (открытые меню, табы).
- **Глобальный стейт:** Строго `Zustand` (директория `src/store/`).
- `authStore`: Хранит JWT-токен и данные профиля (persist in localStorage).
- `cartStore`: Хранит выбранные `seat_id` и считает итоговую сумму (totalPrice).
- **Глобальный стейт (Zustand):**
- `authStore`: Хранит JWT-токен и данные профиля. **Обязательно** использовать persist middleware (хранить в localStorage).
- `cartStore`: Хранит выбранные места (`CartSeat` с `ticketId`). **ЗАПРЕЩЕНО** использовать persist. Корзина живет только в памяти страницы, так как лок места на бэкенде временный (TTL в Redis).
## 3. Работа с API и Сетью
## 3. Работа с API и Сетью (КРИТИЧЕСКИ ВАЖНО)
- **Базовый URL:** ЗАПРЕЩЕНО хардкодить `localhost` или прямые IP в исходном коде. Всегда использовать `process.env.NEXT_PUBLIC_API_URL` с фоллбэком.
- **Клиент:** Axios инстанс (`src/api/client.ts`).
- **Авторизация:** Интерсептор автоматически добавляет `Authorization: Bearer <token>` из `authStore`.
- **Роутинг к Бэкенду:** Base URL указывает на API-шлюз бэкенда.
- **Обработка ошибок:** Все сетевые запросы должны оборачиваться в `try/catch`. 401 ошибка должна разлогинивать юзера и чистить `authStore`. 409 ошибка (Conflict) обрабатывается локально в компонентах (например, при захвате мест).
- **Обработка ошибок:** Все вызовы API оборачивать в `try/catch`. Бизнес-ошибки (например, 409 Conflict) обрабатывать локально с показом Toast-уведомлений.
## 4. Структура директорий
- `src/app/` — Роутинг (Pages, Layouts).
- `src/components/` — Переиспользуемые UI компоненты (Кнопки, Карточки, SVG-схемы).
- `src/components/` — Переиспользуемые UI компоненты.
- `src/api/` — API-клиенты и типизация ответов бэкенда.
- `src/store/` — Zustand-хранилища.