Добавлены модели и функциональность для управления логистикой, включая создание, обновление и удаление логистических маршрутов через GraphQL. Обновлены компоненты для отображения и управления логистикой, улучшен интерфейс взаимодействия с пользователем. Реализованы новые типы данных и интерфейсы для логистики, а также улучшена обработка ошибок.

This commit is contained in:
Bivekich
2025-07-18 15:40:12 +03:00
parent 7e7e4a9b4a
commit 93bb5827d2
20 changed files with 5015 additions and 667 deletions

View File

@ -0,0 +1,102 @@
interface WildberriesWarehouse {
id: number
name: string
address: string
cargoType: number
latitude: number
longitude: number
}
interface WildberriesWarehousesResponse {
data: WildberriesWarehouse[]
}
export class WildberriesService {
private static baseUrl = 'https://marketplace-api.wildberries.ru'
/**
* Получить список складов WB
*/
static async getWarehouses(apiKey: string): Promise<WildberriesWarehouse[]> {
try {
const response = await fetch(`${this.baseUrl}/api/v2/warehouses`, {
method: 'GET',
headers: {
'Authorization': apiKey,
'Content-Type': 'application/json',
},
})
if (!response.ok) {
throw new Error(`WB API Error: ${response.status} ${response.statusText}`)
}
const data: WildberriesWarehousesResponse = await response.json()
return data.data || []
} catch (error) {
console.error('Error fetching WB warehouses:', error)
throw new Error('Ошибка получения складов Wildberries')
}
}
/**
* Валидация API ключа WB
*/
static async validateApiKey(apiKey: string): Promise<boolean> {
try {
await this.getWarehouses(apiKey)
return true
} catch (error) {
console.error('WB API key validation failed:', error)
return false
}
}
/**
* Получить информацию о поставке
*/
static async getSupplyInfo(apiKey: string, supplyId: string): Promise<unknown> {
try {
const response = await fetch(`${this.baseUrl}/api/v3/supplies/${supplyId}`, {
method: 'GET',
headers: {
'Authorization': apiKey,
'Content-Type': 'application/json',
},
})
if (!response.ok) {
throw new Error(`WB API Error: ${response.status} ${response.statusText}`)
}
return await response.json()
} catch (error) {
console.error('Error fetching WB supply info:', error)
throw new Error('Ошибка получения информации о поставке')
}
}
/**
* Получить список поставок
*/
static async getSupplies(apiKey: string, limit: number = 1000, next: number = 0): Promise<unknown> {
try {
const response = await fetch(`${this.baseUrl}/api/v3/supplies?limit=${limit}&next=${next}`, {
method: 'GET',
headers: {
'Authorization': apiKey,
'Content-Type': 'application/json',
},
})
if (!response.ok) {
throw new Error(`WB API Error: ${response.status} ${response.statusText}`)
}
return await response.json()
} catch (error) {
console.error('Error fetching WB supplies:', error)
throw new Error('Ошибка получения списка поставок')
}
}
}