Files
sfera/docs/API.md
Veronika Smirnova bf27f3ba29 Оптимизирована производительность 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>
2025-08-06 13:18:45 +03:00

173 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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]}*