import axios from 'axios'; import { getEbayToken } from './ebayAuth.js'; // Hilfsfunktion: Aufteilen eines Arrays in kleinere Häppchen (Chunks) function chunkArray(array, chunkSize) { const chunks = []; for (let i = 0; i < array.length; i += chunkSize) { chunks.push(array.slice(i, i + chunkSize)); } return chunks; } /** * Durchsucht eBay nach ALLEN Whitelist-Verkäufern in der Datenbank */ export async function searchEbayProducts(query, allowedSellers = [], negativeKeywords = []) { if (!allowedSellers || allowedSellers.length === 0) { console.log('⚠️ Keine Verkäufer in der Whitelist hinterlegt.'); return []; } try { const token = await getEbayToken(); // 1. Verkäufernamen bereinigen const validSellers = allowedSellers .map(s => String(s).trim()) .filter(Boolean); if (validSellers.length === 0) return []; // 2. Verkäufer in 25er-Pakete aufteilen const sellerBatches = chunkArray(validSellers, 25); let allRawItems = []; // 3. Jedes 25er-Paket nacheinander bei eBay abfragen for (const batch of sellerBatches) { const formattedSellers = batch.map(s => encodeURIComponent(s)).join('|'); const sellerFilterString = `sellers:{${formattedSellers}}`; const response = await axios.get('https://api.ebay.com/buy/browse/v1/item_summary/search', { headers: { 'Authorization': `Bearer ${token}`, 'X-EBAY-C-MARKETPLACE-ID': 'EBAY-DE' }, params: { q: query, filter: sellerFilterString, limit: 50, sort: 'newlyListed' } }); const items = response.data.itemSummaries || []; allRawItems = allRawItems.concat(items); } // 4. Duplikate über die itemId entfernen const uniqueItemsMap = new Map(); for (const item of allRawItems) { uniqueItemsMap.set(item.itemId, item); } const uniqueItems = Array.from(uniqueItemsMap.values()); // 5. Negativ-Keywords lokal ausfiltern const filteredItems = uniqueItems.filter(item => { const titleLower = item.title.toLowerCase(); return !negativeKeywords.some(kw => titleLower.includes(kw.toLowerCase().trim())); }); return filteredItems.map(item => ({ itemId: item.itemId, title: item.title, price: item.price?.value, currency: item.price?.currency || 'EUR', sellerUsername: item.seller?.username || 'Unbekannt', itemUrl: item.itemWebUrl, imageUrl: item.image?.imageUrl || null })); } catch (error) { const apiError = error.response?.data?.errors?.[0]?.message || error.message; console.error(`❌ Fehler bei der eBay-Suche für "${query}":`, apiError); return []; } }