6.5 KiB
6.5 KiB
План рефакторинга shop
Составлен на основе анализа кода и правил
.cursor/rules. Дата: 2026-05-13
Статус выполнения
- ✅ 1.1 Сервер: разбить
routes/auth.js→ 6 модулей - ✅ 1.2 Клиент: разбить
AdminPage.tsx→AdminProductsPage+AdminCategoriesPage - ✅ 1.3 Клиент: разбить
OrderDetailPage.tsx(чаты, оплата, отзывы → features) - ✅ 2.2 FSD: роутинг из
App.tsx→app/routes/index.tsx - ✅ 3.1 Клиент: разбить
AppHeader.tsx(UserMenu, CartBadge, NavigationDrawer) - ✅ 4.1 Effector: рефакторинг
auth.ts(persist, sample, createErrorStore) - ✅ 2.1 Недостающие сегменты FSD (catalog-slider, gallery, info, address-map-picker)
- ✅ 2.3 Дублирование констант клиент/сервер
- ✅ 3.2 HomePage (вынесены фильтры в хук и компонент)
- ✅ 3.3 AdminOrdersPage, AdminUsersPage (shared AdminDialog + AdminTable)
- ✅ 5.1 fastify.decorate вместо параметров
- ✅ 5.2 Валидация через Fastify Schema
- ⬜ 6.1 Error Boundary
- ⬜ 6.2 Тесты
1. Критические точки (высокий приоритет) — ✅ Выполнено
1.1 Сервер: разбить server/src/routes/auth.js (892 → ~200 строк)
| Файл | Роуты |
|---|---|
routes/auth.js |
/api/auth/request-code, /api/auth/verify-code, /api/me, /api/me/change-email/*, /api/me/profile |
routes/user-addresses.js |
/api/me/addresses (6 роутов CRUD + default) |
routes/user-cart.js |
/api/me/cart (4 роута CRUD) |
routes/user-orders.js |
/api/me/orders (создание, список, деталь, подтверждение, review-eligibility) |
routes/user-payments.js |
/api/me/orders/:id/pay |
routes/user-messages.js |
/api/me/orders/:id/messages, unread-count, conversations, mark-read |
1.2 Клиент: разбить AdminPage.tsx (891 → 604 + 295 строк)
pages/admin-products/+pages/admin-categories/AdminLayoutPage— новый нав-айтем «Категории», роут/admin/categories
1.3 Клиент: разбить OrderDetailPage.tsx (609 → 258 строк)
features/order-chat/— чат по заказуfeatures/order-payment/— секция оплаты + модалка (OrderPaymentSection,PaymentDialog)features/product-review/— секция отзывов + модалка (ReviewSection,ReviewDialog)
2. FSD-архитектура
2.1 Создать недостающие сегменты ✅
| Слайс | Что сделано |
|---|---|
entities/catalog-slider |
model/types.ts, index.ts (barrel), импорты обновлены |
entities/gallery |
ui/GalleryGrid.tsx, index.ts, импорты обновлены |
entities/info |
model/types.ts, index.ts, импорты обновлены |
features/address-map-picker |
api/map-geocoding.ts, model/types.ts, index.ts, импорты обновлены |
2.2 Вынести роутинг из App.tsx → app/routes/ ✅
AppRoutes в app/routes/index.tsx. App.tsx — чистая точка входа.
2.3 Устранить дублирование констант клиент/сервер ✅
Создан shared/constants/ с каноничными значениями (order-status.js, delivery-carrier.js, upload-limits.js, payment-method.js). Все клиентские и серверные константы импортируются оттуда. Vite + tsconfig настроены на @shared/* alias.
3. Клиентские компоненты
3.1 AppHeader.tsx (406 → 293 строк) ✅
UserMenu→features/user/user-menu/CartBadge→features/cart/cart-badge/NavigationDrawer→widgets/navigation-drawer/
3.2 HomePage.tsx (414 → 157 строк) ✅
useProductFiltersхук вpages/home/lib/ProductFiltersкомпонент вpages/home/ui/- Фильтры, сортировка, масштаб карточек вынесены из страницы
3.3 AdminOrdersPage.tsx, AdminUsersPage.tsx ✅
shared/ui/AdminTable/— компонент таблицы с loading/error/skeletonshared/ui/AdminDialog/— компонент диалога с loading/error/title/actionsAdminUsersPage: таблица и диалог заменены на общие компонентыAdminOrdersPage: диалог заменён наAdminDialog
4. Effector + состояние — ✅ Выполнено
4.1 shared/model/auth.ts (96 → 83 строк)
.watch()→sample+persistTokenFx- Убран
tokenPersistInitializedфлаг createErrorStore(effect)— общий шаблон сторов ошибокreadStoredToken→shared/lib/persist-token.ts(re-export из auth.ts)- Создан
shared/lib/create-error-store.ts
5. Сервер (низкий приоритет)
5.1 fastify.decorate вместо передачи зависимостей параметрами ✅
slugify, parseMaterialsInput, mapProductForApi декорированы на fastify в api.js. Роуты используют request.server.* вместо получения через параметры.
5.2 Валидация через Fastify Schema ✅
Добавлены JSON Schema для:
POST /api/admin/products— bodyPATCH /api/admin/products/:id— bodyGET /api/products— querystring (фильтры, пагинация)
6. Инфраструктура (низкий приоритет)
6.1 Error Boundary ⬜
6.2 Тесты ⬜
Сводка изменений
| Область | Файлов создано | Файлов изменено |
|---|---|---|
| Server routes | 0 | 4 (декораты + схемы) |
| Client pages | 3 | 2 (HomePage, AdminOrdersPage, AdminUsersPage) |
| Client entities | 6 | 2 (barrel, GalleryGrid, model types) |
| Client features | 3 | 2 (map-geocoding, AddressMapPicker) |
| Client shared/ui | 2 | 0 (AdminDialog, AdminTable) |
| Client app config | 0 | 2 (vite.config, tsconfig) |
| Shared constants | 8 | 0 (order-status, delivery-carrier, etc.) |
| Server constants | 0 | 3 (order-status, delivery-carrier, upload-limits) |
| Итого | 22 | 15 |