From d565416b55a1842f95aaa3d9f1ad4fe6c8fd9d1a Mon Sep 17 00:00:00 2001 From: Bivekich Date: Mon, 30 Jun 2025 00:39:51 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD=D1=8B=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20Apollo=20Server,=20=D0=BE=D0=B1=D0=B5?= =?UTF-8?q?=D1=81=D0=BF=D0=B5=D1=87=D0=B8=D0=B2=D0=B0=D1=8E=D1=89=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BB=D0=BE=D0=B3=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D0=B9?= =?UTF-8?q?=20GraphQL=20=D0=B8=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D1=83=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA.=20?= =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD=D0=BE=20=D0=BB=D0=BE?= =?UTF-8?q?=D0=B3=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B2?= =?UTF-8?q?=20=D1=80=D0=B5=D0=B7=D0=BE=D0=BB=D0=B2=D0=B5=D1=80=D0=B0=D1=85?= =?UTF-8?q?,=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8=20=D0=BF=D0=B0?= =?UTF-8?q?=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=BE=D0=B2=20=D1=81=20?= =?UTF-8?q?=D0=B4=D0=B5=D1=82=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B9=20=D0=B8?= =?UTF-8?q?=D0=BD=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=86=D0=B8=D0=B5=D0=B9.?= =?UTF-8?q?=20=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20?= =?UTF-8?q?=D1=82=D0=B8=D0=BF=D1=8B=20GraphQL=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B8=20=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D1=8B=D1=85=20=D0=BF=D0=BE=D0=BB=D0=B5=D0=B9=20?= =?UTF-8?q?=D0=B2=20=D0=B4=D0=B5=D1=82=D0=B0=D0=BB=D1=8F=D1=85=20=D0=B3?= =?UTF-8?q?=D1=80=D1=83=D0=BF=D0=BF=D1=8B=20=D0=B1=D1=8B=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/api/graphql/route.ts | 18 +++++++++++++++ src/lib/graphql/resolvers.ts | 44 +++++++++++++++++++++++++++++------- src/lib/graphql/typeDefs.ts | 3 +++ 3 files changed, 57 insertions(+), 8 deletions(-) diff --git a/src/app/api/graphql/route.ts b/src/app/api/graphql/route.ts index 19e2de5..c9d6d02 100644 --- a/src/app/api/graphql/route.ts +++ b/src/app/api/graphql/route.ts @@ -86,6 +86,24 @@ const server = new ApolloServer({ typeDefs, resolvers, introspection: true, + plugins: [ + { + async requestDidStart() { + return { + async didResolveOperation(requestContext: any) { + console.log('🔍 GraphQL Operation:', { + operationName: requestContext.request.operationName, + query: requestContext.request.query?.replace(/\s+/g, ' ').substring(0, 200) + '...', + variables: requestContext.request.variables + }); + }, + async didEncounterErrors(requestContext: any) { + console.error('❌ GraphQL Errors:', requestContext.errors); + } + }; + } + } + ] }) const handler = startServerAndCreateNextHandler(server, { diff --git a/src/lib/graphql/resolvers.ts b/src/lib/graphql/resolvers.ts index 5162081..d02aedd 100644 --- a/src/lib/graphql/resolvers.ts +++ b/src/lib/graphql/resolvers.ts @@ -1819,24 +1819,52 @@ export const resolvers = { laximoQuickDetail: async (_: unknown, { catalogCode, vehicleId, quickGroupId, ssd }: { catalogCode: string; vehicleId: string; quickGroupId: string; ssd: string }) => { try { - console.log('🔍 Запрос деталей группы быстрого поиска:', { - catalogCode, - vehicleId, - quickGroupId, + console.log('🔍 Запрос деталей группы быстрого поиска - RAW PARAMS:', { + catalogCode: catalogCode, + catalogCodeType: typeof catalogCode, + catalogCodeLength: catalogCode?.length, + vehicleId: vehicleId, + vehicleIdType: typeof vehicleId, + vehicleIdLength: vehicleId?.length, + quickGroupId: quickGroupId, quickGroupIdType: typeof quickGroupId, quickGroupIdLength: quickGroupId?.length, - ssd: ssd ? `${ssd.substring(0, 30)}...` : 'отсутствует' + ssd: ssd ? `${ssd.substring(0, 50)}...` : 'отсутствует', + ssdType: typeof ssd, + ssdLength: ssd?.length }) - // Валидация параметров + // Валидация параметров с детальными логами + console.log('🔍 Проверка catalogCode:', { catalogCode, isEmpty: !catalogCode, isTrimEmpty: catalogCode?.trim() === '' }) + if (!catalogCode || catalogCode.trim() === '') { + console.error('❌ Пустой catalogCode:', catalogCode) + throw new Error(`Пустой код каталога: "${catalogCode}"`) + } + + console.log('🔍 Проверка vehicleId:', { vehicleId, isUndefined: vehicleId === undefined, isNull: vehicleId === null, isEmpty: vehicleId === '' }) + if (vehicleId === undefined || vehicleId === null) { + console.error('❌ Пустой vehicleId:', vehicleId) + throw new Error(`Пустой ID автомобиля: "${vehicleId}"`) + } + + console.log('🔍 Проверка quickGroupId:', { quickGroupId, isEmpty: !quickGroupId, isTrimEmpty: quickGroupId?.trim() === '' }) if (!quickGroupId || quickGroupId.trim() === '') { console.error('❌ Пустой quickGroupId:', quickGroupId) throw new Error(`Пустой ID группы: "${quickGroupId}"`) } - return await laximoService.getListQuickDetail(catalogCode, vehicleId, quickGroupId, ssd) + console.log('🔍 Проверка ssd:', { ssd: ssd ? `${ssd.substring(0, 30)}...` : ssd, isEmpty: !ssd, isTrimEmpty: ssd?.trim() === '' }) + if (!ssd || ssd.trim() === '') { + console.error('❌ Пустой ssd:', ssd) + throw new Error(`Пустой SSD: "${ssd}"`) + } + + console.log('✅ Все параметры валидны, вызываем laximoService.getListQuickDetail') + const result = await laximoService.getListQuickDetail(catalogCode, vehicleId, quickGroupId, ssd) + console.log('✅ Результат от laximoService:', result ? 'получен' : 'null') + return result } catch (error) { - console.error('Ошибка получения деталей группы быстрого поиска:', error) + console.error('❌ Ошибка получения деталей группы быстрого поиска:', error) throw error // Пробрасываем ошибку наверх } }, diff --git a/src/lib/graphql/typeDefs.ts b/src/lib/graphql/typeDefs.ts index 5f0b90d..ba428e3 100644 --- a/src/lib/graphql/typeDefs.ts +++ b/src/lib/graphql/typeDefs.ts @@ -1421,6 +1421,9 @@ export const typeDefs = gql` detailid: String! name: String! oem: String! + formattedoem: String + parttype: String + filter: String brand: String description: String applicablemodels: String