Обновлены логика работы с параметром SSD в классе LaximoService и резолверах. Теперь SSD используется для получения узлов в категориях, что улучшает обработку запросов к API. Добавлено извлечение SSD узла и соответствующие изменения в логах для повышения информативности. Это повышает надежность взаимодействия с API и улучшает структуру данных.
This commit is contained in:
@ -1831,22 +1831,38 @@ export const resolvers = {
|
||||
if (categoryId) {
|
||||
console.log('🔧 Поиск узлов в категории:', categoryId)
|
||||
|
||||
// Для обычных категорий НЕ используем SSD - он нужен только для быстрых групп
|
||||
// ИСПРАВЛЕНИЕ: Разные каталоги поддерживают разные параметры для ListUnits
|
||||
try {
|
||||
console.log('🔧 Пробуем ListUnits БЕЗ SSD для обычной категории...')
|
||||
result = await laximoService.getListUnits(catalogCode, vehicleId, undefined, categoryId)
|
||||
console.log('🔧 Пробуем ListUnits с SSD для категории...')
|
||||
result = await laximoService.getListUnits(catalogCode, vehicleId, ssd, categoryId)
|
||||
console.log('✅ Получено узлов в категории:', result.length)
|
||||
} catch (error: any) {
|
||||
console.log('⚠️ Ошибка ListUnits без SSD:', error.message)
|
||||
console.log('⚠️ Ошибка ListUnits с SSD:', error.message)
|
||||
|
||||
// Если и без SSD не работает, пробуем получить категории вместо узлов
|
||||
try {
|
||||
console.log('🔧 Пробуем получить подкатегории...')
|
||||
result = await laximoService.getListCategories(catalogCode, vehicleId, undefined)
|
||||
// Фильтруем только подкатегории данной категории, если есть parent-child связи
|
||||
console.log('✅ Получено подкатегорий:', result.length)
|
||||
} catch (categoriesError: any) {
|
||||
console.log('⚠️ Ошибка получения подкатегорий:', categoriesError.message)
|
||||
// Если ошибка E_INVALIDPARAMETER:ssd - значит данная категория/каталог не поддерживает SSD
|
||||
if (error.message.includes('E_INVALIDPARAMETER:ssd')) {
|
||||
console.log('🔧 Каталог/категория не поддерживает SSD, пробуем без SSD...')
|
||||
try {
|
||||
result = await laximoService.getListUnits(catalogCode, vehicleId, undefined, categoryId)
|
||||
console.log('✅ Получено узлов в категории (без SSD):', result.length)
|
||||
} catch (noSsdError: any) {
|
||||
console.log('⚠️ Ошибка ListUnits без SSD:', noSsdError.message)
|
||||
|
||||
// Если и без SSD не работает, значит данная категория не содержит узлов
|
||||
// Возвращаем пустой массив вместо ошибки
|
||||
console.log('🔧 Категория не содержит узлов, возвращаем пустой результат')
|
||||
result = []
|
||||
}
|
||||
} else {
|
||||
// Для других ошибок также пробуем без SSD
|
||||
try {
|
||||
console.log('🔧 Пробуем ListUnits без SSD для обычной категории...')
|
||||
result = await laximoService.getListUnits(catalogCode, vehicleId, undefined, categoryId)
|
||||
console.log('✅ Получено узлов в категории (без SSD):', result.length)
|
||||
} catch (noSsdError: any) {
|
||||
console.log('⚠️ Ошибка ListUnits без SSD:', noSsdError.message)
|
||||
result = []
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
@ -131,6 +131,7 @@ export interface LaximoQuickGroup {
|
||||
code?: string
|
||||
imageurl?: string
|
||||
largeimageurl?: string
|
||||
ssd?: string // ИСПРАВЛЕНИЕ: Добавляем поле SSD для узлов
|
||||
}
|
||||
|
||||
export interface LaximoQuickDetail {
|
||||
@ -1107,17 +1108,29 @@ class LaximoService {
|
||||
command += `|VehicleId=${vehicleId}`
|
||||
}
|
||||
|
||||
// 🎯 ИСПРАВЛЕНИЕ: Для категорий каталога НЕ используем SSD
|
||||
// SSD используется только для QuickGroup'ов, но не для категорий
|
||||
// 🎯 ИСПРАВЛЕНИЕ: Для категорий каталога требуется SSD согласно API Laximo
|
||||
// Без SSD API возвращает ошибку E_INVALIDPARAMETER:ssd
|
||||
if (categoryId) {
|
||||
// Если указана категория, НЕ добавляем SSD - показываем ВСЕ узлы категории
|
||||
command += `|CategoryId=${categoryId}`
|
||||
console.log('🔧 Режим "От производителя": используем CategoryId БЕЗ SSD для получения всех узлов категории')
|
||||
// SSD обязателен для ListUnits даже с CategoryId
|
||||
if (ssd && ssd.trim() !== '') {
|
||||
const escapedSsd = this.escapeSsdForXML(ssd)
|
||||
command += `|ssd=${escapedSsd}`
|
||||
console.log('🔧 Режим "От производителя": используем CategoryId с SSD')
|
||||
} else {
|
||||
// Если SSD отсутствует, используем пустой SSD
|
||||
command += `|ssd=`
|
||||
console.log('🔧 Режим "От производителя": используем CategoryId с пустым SSD')
|
||||
}
|
||||
} else if (ssd && ssd.trim() !== '') {
|
||||
// SSD добавляем только если НЕТ CategoryId (для QuickGroup'ов)
|
||||
// SSD добавляем для QuickGroup'ов
|
||||
const escapedSsd = this.escapeSsdForXML(ssd)
|
||||
command += `|ssd=${escapedSsd}`
|
||||
console.log('🔧 Режим "Общие": используем SSD для получения узлов автомобиля')
|
||||
} else {
|
||||
// Всегда добавляем SSD параметр, даже если он пустой
|
||||
command += `|ssd=`
|
||||
console.log('🔧 Добавляем пустой SSD параметр')
|
||||
}
|
||||
|
||||
const hmac = this.createHMAC(command)
|
||||
@ -1194,6 +1207,7 @@ class LaximoService {
|
||||
const code = this.extractAttribute(attributes, 'code')
|
||||
const imageurl = this.extractAttribute(attributes, 'imageurl')
|
||||
const largeimageurl = this.extractAttribute(attributes, 'largeimageurl')
|
||||
const ssd = this.extractAttribute(attributes, 'ssd') // ИСПРАВЛЕНИЕ: Извлекаем SSD узла
|
||||
const hasDetails = this.extractAttribute(attributes, 'hasdetails') === 'true'
|
||||
|
||||
if (unitid && name) {
|
||||
@ -1203,7 +1217,8 @@ class LaximoService {
|
||||
link: hasDetails,
|
||||
code: code || undefined,
|
||||
imageurl: imageurl || undefined,
|
||||
largeimageurl: largeimageurl || undefined
|
||||
largeimageurl: largeimageurl || undefined,
|
||||
ssd: ssd || undefined // ИСПРАВЛЕНИЕ: Добавляем SSD узла для дальнейшего использования
|
||||
}
|
||||
|
||||
console.log('📦 Найден узел каталога:', {
|
||||
@ -1211,6 +1226,7 @@ class LaximoService {
|
||||
name,
|
||||
code,
|
||||
imageurl: imageurl ? imageurl.substring(0, 50) + '...' : 'отсутствует',
|
||||
ssd: ssd ? `${ssd.substring(0, 50)}...` : 'отсутствует', // ИСПРАВЛЕНИЕ: Показываем SSD узла
|
||||
hasDetails
|
||||
})
|
||||
groups.push(group)
|
||||
|
Reference in New Issue
Block a user