Оптимизирована производительность React компонентов с помощью мемоизации

КРИТИЧНЫЕ КОМПОНЕНТЫ ОПТИМИЗИРОВАНЫ:
• AdminDashboard (346 kB) - добавлены React.memo, useCallback, useMemo
• SellerStatisticsDashboard (329 kB) - мемоизация кэша и callback функций
• CreateSupplyPage (276 kB) - оптимизированы вычисления и обработчики
• EmployeesDashboard (268 kB) - мемоизация списков и функций
• SalesTab + AdvertisingTab - React.memo обертка

ТЕХНИЧЕСКИЕ УЛУЧШЕНИЯ:
 React.memo() для предотвращения лишних рендеров
 useMemo() для тяжелых вычислений
 useCallback() для стабильных ссылок на функции
 Мемоизация фильтрации и сортировки списков
 Оптимизация пропсов в компонентах-контейнерах

РЕЗУЛЬТАТЫ:
• Все компоненты успешно компилируются
• Линтер проходит без критических ошибок
• Сохранена вся функциональность
• Улучшена производительность рендеринга
• Снижена нагрузка на React дерево

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Veronika Smirnova
2025-08-06 13:18:45 +03:00
parent ef5de31ce7
commit bf27f3ba29
317 changed files with 26722 additions and 38332 deletions

173
docs/API.md Normal file
View File

@ -0,0 +1,173 @@
# API Documentation
## GraphQL Schema Overview
### Основные типы
#### Organization Types
```graphql
enum OrganizationType {
SELLER # Селлер
WHOLESALE # Поставщик
FULFILLMENT # Фулфилмент
LOGIST # Логистика
}
```
#### Product Types
```graphql
enum ProductType {
PRODUCT # Товар
CONSUMABLE # Расходники
DEFECT # Брак (планируется)
FINISHED_PRODUCT # Готовый продукт (планируется)
}
```
#### Supply Order Statuses
```graphql
enum SupplyOrderStatus {
PENDING
SUPPLIER_APPROVED
CONFIRMED
LOGISTICS_CONFIRMED
SHIPPED
IN_TRANSIT
DELIVERED
CANCELLED
}
```
## Основные Query запросы
### Аутентификация и пользователи
- `me` - Текущий пользователь
- `checkUserExists(phone: String!)` - Проверка существования пользователя
### Организации и партнеры
- `myOrganization` - Организация текущего пользователя
- `myCounterparties` - Список партнеров
- `myCounterpartyRequests` - Заявки на партнерство
- `searchOrganizations(search: String, type: OrganizationType)` - Поиск организаций
### Товары и склад
- `myProducts` - Товары организации
- `organizationProducts(organizationId: ID!, type: ProductType)` - Товары конкретной организации
- `getSupplierGoods(supplierId: ID!)` - Товары поставщика
- `myWarehouseStats` - Статистика склада
- `fulfillmentWarehouseStats` - Статистика фулфилмент склада
### Поставки
- `mySupplyOrders` - Заказы поставок
- `mySupplies` - Поставки организации
- `getSupplySuppliers` - Поставщики для поставок
### Услуги (Фулфилмент)
- `myServices` - Услуги фулфилмента
- `myLogistics` - Логистические маршруты
- `myEmployees` - Сотрудники
- `employeeSchedule(employeeId: ID!, year: Int!, month: Int!)` - График сотрудника
### Wildberries интеграция
- `getWBProducts` - Товары из WB
- `getWBWarehouseData` - Данные склада WB
- `getWBReturnClaims` - Заявки на возврат WB
## Основные Mutations
### Аутентификация
- `sendSmsCode(phone: String!)` - Отправка SMS кода
- `verifySmsCode(phone: String!, code: String!)` - Верификация кода
- `updateUserAvatar(avatar: String!)` - Обновление аватара
### Организации
- `createOrganization(input: CreateOrganizationInput!)` - Создание организации
- `updateOrganization(input: UpdateOrganizationInput!)` - Обновление организации
### Товары
- `createProduct(input: CreateProductInput!)` - Создание товара
- `updateProduct(id: ID!, input: UpdateProductInput!)` - Обновление товара
- `deleteProduct(id: ID!)` - Удаление товара
- `toggleProductStatus(id: ID!)` - Изменение статуса товара
### Поставки
- `createSupplyOrder(input: CreateSupplyOrderInput!)` - Создание заказа
- `updateSupplyOrderStatus(id: ID!, status: SupplyOrderStatus!)` - Обновление статуса
- `createWildberriesSupply(input: CreateWildberriesSupplyInput!)` - Создание WB поставки
### Партнерство
- `sendCounterpartyRequest(receiverId: ID!, message: String)` - Отправка заявки
- `acceptCounterpartyRequest(requestId: ID!)` - Принятие заявки
- `rejectCounterpartyRequest(requestId: ID!)` - Отклонение заявки
### Услуги (Фулфилмент)
- `createService(input: CreateServiceInput!)` - Создание услуги
- `updateService(id: ID!, input: UpdateServiceInput!)` - Обновление услуги
- `deleteService(id: ID!)` - Удаление услуги
### Сотрудники (Фулфилмент)
- `createEmployee(input: CreateEmployeeInput!)` - Создание сотрудника
- `updateEmployee(id: ID!, input: UpdateEmployeeInput!)` - Обновление сотрудника
- `deleteEmployee(id: ID!)` - Удаление сотрудника
- `updateEmployeeSchedule(input: UpdateEmployeeScheduleInput!)` - Обновление графика
## Правила доступа
### Общие правила
- Все запросы требуют аутентификации (кроме auth endpoints)
- Доступ ограничен типом организации пользователя
- Фулфилмент имеет максимальные права доступа
### Специфичные ограничения
- **Создание товаров**: Только WHOLESALE
- **Создание услуг**: Только FULFILLMENT
- **Управление сотрудниками**: Только FULFILLMENT
- **Просмотр всех заказов**: FULFILLMENT и участники заказа
## Примеры запросов
### Получение товаров поставщика
```graphql
query GetSupplierProducts($organizationId: ID!) {
organizationProducts(organizationId: $organizationId, type: PRODUCT) {
id
name
article
price
quantity
images
}
}
```
### Создание заказа поставки
```graphql
mutation CreateSupplyOrder($input: CreateSupplyOrderInput!) {
createSupplyOrder(input: $input) {
id
status
items {
product {
name
}
quantity
price
}
}
}
```
### Обновление статуса поставки
```graphql
mutation UpdateSupplyStatus($id: ID!, $status: SupplyOrderStatus!) {
updateSupplyOrderStatus(id: $id, status: $status) {
id
status
updatedAt
}
}
```
---
*Последнее обновление: ${new Date().toISOString().split('T')[0]}*

160
docs/ARCHITECTURE.md Normal file
View File

@ -0,0 +1,160 @@
# Архитектура системы управления складами и поставками
## 📋 Обзор проекта
Система управления складами и поставками - это комплексное решение для управления логистикой, включающее 4 типа кабинетов для разных ролей.
## 🏗️ Технологический стек
### Frontend
- **Framework**: Next.js 15.4.1 (с Turbopack)
- **UI Library**: React 19.1.0
- **Language**: TypeScript 5
- **Styling**: TailwindCSS 4
- **State Management**: Apollo Client 3.13.8
- **UI Components**: Radix UI
### Backend
- **API**: GraphQL (Apollo Server 4.12.2)
- **Database**: PostgreSQL с Prisma ORM 6.12.0
- **Authentication**: JWT
- **File Storage**: AWS S3
### DevOps & Tools
- **Package Manager**: npm
- **Linting**: ESLint 9 + Prettier
- **Build**: Next.js build system
## 📁 Структура проекта
```
sfera/
├── src/
│ ├── app/ # Next.js 15 App Router
│ │ ├── api/ # API endpoints
│ │ ├── dashboard/ # Главная страница
│ │ ├── supplies/ # Управление поставками
│ │ ├── warehouse/ # Склад
│ │ └── ... # Другие страницы
│ ├── components/ # React компоненты
│ │ ├── ui/ # Базовые UI компоненты
│ │ ├── supplies/ # Компоненты поставок
│ │ ├── warehouse/ # Компоненты склада
│ │ └── ... # Компоненты по доменам
│ ├── graphql/ # GraphQL схема и резолверы
│ │ ├── queries.ts # GraphQL запросы
│ │ ├── mutations.ts # GraphQL мутации
│ │ ├── resolvers/ # Модульные резолверы
│ │ └── typedefs.ts # Type definitions
│ ├── hooks/ # Custom React hooks
│ ├── lib/ # Утилиты и конфигурации
│ ├── services/ # Бизнес-логика и интеграции
│ └── types/ # TypeScript типы
├── prisma/
│ └── schema.prisma # Схема базы данных
├── public/ # Статические файлы
└── docs/ # Документация
```
## 🏢 Типы кабинетов
### 1. Кабинет Селлера (SELLER)
- Управление поставками
- Интеграция с маркетплейсами
- Заказ товаров у поставщиков
### 2. Кабинет Поставщика (WHOLESALE)
- Управление складом товаров
- Обработка заказов от селлеров
- Создание товаров и расходников
### 3. Кабинет Фулфилмента (FULFILLMENT)
- Полный доступ к системе
- Управление складом фулфилмента
- Услуги и сотрудники
- Обработка поставок
### 4. Кабинет Логистики (LOGIST)
- Управление доставками
- Маршруты и тарифы
- Отслеживание грузов
## 🔄 Основные бизнес-процессы
### Workflow поставки
1. PENDING - Ожидает подтверждения
2. SUPPLIER_APPROVED - Одобрено поставщиком
3. CONFIRMED - Подтверждено
4. LOGISTICS_CONFIRMED - Подтверждено логистикой
5. SHIPPED - Отгружено
6. IN_TRANSIT - В пути
7. DELIVERED - Доставлено
8. CANCELLED - Отменено
## 🗄️ Схема базы данных
### Основные модели
- **User** - Пользователи системы
- **Organization** - Организации (4 типа)
- **Product** - Товары и расходники
- **SupplyOrder** - Заказы поставок
- **Counterparty** - Партнерские связи
- **Service** - Услуги фулфилмента
- **Employee** - Сотрудники
## 🔐 Система безопасности
- JWT авторизация
- Ролевой доступ (RBAC)
- Проверки на уровне GraphQL резолверов
- Шифрование чувствительных данных
## 📡 API Endpoints
### GraphQL
- `/api/graphql` - Основной GraphQL endpoint
### REST
- `/api/upload-file` - Загрузка файлов
- `/api/health` - Health check
- `/api/track-click` - Трекинг кликов
## 🚀 Команды для разработки
```bash
# Разработка
npm run dev
# Сборка
npm run build
# Линтинг
npm run lint
npm run lint:fix
# Форматирование
npm run format
npm run format:check
# База данных
npm run db:seed
npm run db:reset
```
## 📊 Метрики и мониторинг
- Логирование ошибок в консоль
- Отслеживание производительности через Next.js
- Метрики использования API
## 🔄 Планы развития
1. Внедрение микросервисной архитектуры
2. Улучшение типизации (GraphQL Codegen)
3. Добавление E2E тестирования
4. Поддержка офлайн-режима
5. Оптимизация производительности
---
*Последнее обновление: ${new Date().toISOString().split('T')[0]}*

73
docs/PHASE1_REPORT.md Normal file
View File

@ -0,0 +1,73 @@
# Отчет по выполнению Фазы 1: Очистка и подготовка
## ✅ Выполненные задачи
### 1. Удаление старых файлов
**Статус**: Завершено
Удалены следующие файлы:
- `/src/components/seller-statistics/advertising-tab.tsx.backup`
- `/src/components/fulfillment-warehouse/fulfillment-supplies-page.tsx.backup`
- `/src/components/wb-warehouse/wb-warehouse-dashboard-old.tsx`
- `/src/components/wb-warehouse/wb-warehouse-dashboard-refactored.tsx`
### 2. Настройка ESLint и Prettier
**Статус**: Завершено
Созданы и настроены:
- `eslint.config.mjs` - улучшенная конфигурация ESLint с правилами для TypeScript, React и импортов
- `.prettierrc` - конфигурация Prettier для единого стиля кода
- `.prettierignore` - исключения для Prettier
Добавлены npm скрипты:
- `npm run lint:fix` - автоматическое исправление ошибок линтера
- `npm run format` - форматирование кода
- `npm run format:check` - проверка форматирования
### 3. Документация
**Статус**: Завершено
Созданы документы:
- `/docs/ARCHITECTURE.md` - описание архитектуры системы
- `/docs/API.md` - документация GraphQL API
### 4. Инструменты разработки
**Статус**: Завершено
Настроены:
- Husky для pre-commit hooks
- lint-staged для проверки только измененных файлов
- VS Code settings для автоформатирования
## 📋 Рекомендации для следующих шагов
### Немедленные действия:
1. Запустить `npm run lint:fix` для исправления текущих ошибок линтинга
2. Запустить `npm run format` для форматирования всего кода
3. Сделать commit изменений
### Для Фазы 2 (Типизация):
1. Установить `@graphql-codegen/cli` и плагины
2. Настроить генерацию типов из GraphQL схемы
3. Включить strict mode в TypeScript
4. Удалить все `any` типы
## 📊 Метрики
- **Удалено файлов**: 4
- **Создано конфигураций**: 6
- **Добавлено инструментов**: 3 (ESLint улучшен, Prettier, Husky)
- **Создано документации**: 2 файла
## 🚨 Обнаруженные проблемы
1. В коде много `@typescript-eslint/no-explicit-any` комментариев
2. Импорты не стандартизированы
3. Отсутствует генерация типов для GraphQL
4. Нет тестов
Эти проблемы будут решены в следующих фазах рефакторинга.
---
*Фаза 1 завершена: ${new Date().toISOString()}*