Добавлены модели и функциональность для управления логистикой, включая создание, обновление и удаление логистических маршрутов через GraphQL. Обновлены компоненты для отображения и управления логистикой, улучшен интерфейс взаимодействия с пользователем. Реализованы новые типы данных и интерфейсы для логистики, а также улучшена обработка ошибок.
This commit is contained in:
102
src/services/wildberries-service.ts
Normal file
102
src/services/wildberries-service.ts
Normal 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('Ошибка получения списка поставок')
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user