
КРИТИЧНЫЕ КОМПОНЕНТЫ ОПТИМИЗИРОВАНЫ: • 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>
173 lines
6.0 KiB
Markdown
173 lines
6.0 KiB
Markdown
# 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]}* |