Оптимизирована производительность 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]}*