Оптимизирована производительность 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]}*
|
Reference in New Issue
Block a user