Оптимизирована производительность 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:
173
docs/API.md
Normal file
173
docs/API.md
Normal 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
160
docs/ARCHITECTURE.md
Normal 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
73
docs/PHASE1_REPORT.md
Normal 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()}*
|
Reference in New Issue
Block a user