Files
protekauto-frontend/src/lib/partsindex-service.ts
2025-07-29 18:55:22 +03:00

100 lines
2.8 KiB
TypeScript
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.

import { PartsIndexCatalogsResponse, PartsIndexGroup, PartsIndexEntityInfoResponse } from '@/types/partsindex';
const PARTS_INDEX_API_BASE = process.env.PARTSAPI_URL || 'https://api.parts-index.com';
const API_KEY = 'PI-E1C0ADB7-E4A8-4960-94A0-4D9C0A074DAE';
// Debug logging for development
if (process.env.NODE_ENV === 'development') {
console.log('🔍 PartsIndex API Base URL:', PARTS_INDEX_API_BASE);
console.log('🔍 Environment variable NEXT_PUBLIC_PARTSAPI_URL:', process.env.NEXT_PUBLIC_PARTSAPI_URL);
}
class PartsIndexService {
/**
* Получить список каталогов
*/
async getCatalogs(lang: string = 'ru'): Promise<PartsIndexCatalogsResponse> {
try {
const response = await fetch(
`${PARTS_INDEX_API_BASE}/v1/catalogs?lang=${lang}`,
{
headers: {
'Accept': 'application/json',
},
}
);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return await response.json();
} catch (error) {
console.error('Ошибка получения каталогов Parts Index:', error);
throw error;
}
}
/**
* Получить группы каталога
*/
async getCatalogGroups(catalogId: string, lang: string = 'ru'): Promise<PartsIndexGroup> {
try {
const response = await fetch(
`${PARTS_INDEX_API_BASE}/v1/catalogs/${catalogId}/groups?lang=${lang}`,
{
headers: {
'Accept': 'application/json',
'Authorization': API_KEY,
},
}
);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return await response.json();
} catch (error) {
console.error(`Ошибка получения групп каталога ${catalogId}:`, error);
throw error;
}
}
/**
* Получить информацию о детали по артикулу и бренду
*/
async getEntityInfo(code: string, brand?: string, lang: string = 'ru'): Promise<PartsIndexEntityInfoResponse> {
try {
const params = new URLSearchParams({
code: code,
lang: lang
});
if (brand) {
params.append('brand', brand);
}
const response = await fetch(
`${PARTS_INDEX_API_BASE}/v1/entities?${params.toString()}`,
{
headers: {
'Accept': 'application/json',
'Authorization': API_KEY,
},
}
);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return await response.json();
} catch (error) {
console.error(`Ошибка получения информации о детали ${code}:`, error);
throw error;
}
}
}
export const partsIndexService = new PartsIndexService();