import { createClient } from '@supabase/supabase-js'; const SUPABASE_URL = process.env.SUPABASE_URL || 'https://hwithddwaapyhnfwcesj.supabase.co'; const SUPABASE_KEY = process.env.SUPABASE_SERVICE_KEY || 'sb_publishable_fGXkh0bSrAOqSk2jWKAzSg_NJD9YPCv'; const ALLOWED_ORIGIN = 'https://craze-data-check.vercel.app'; const supabase = createClient(SUPABASE_URL, SUPABASE_KEY); function setCors(req, res) { const origin = req.headers.origin; if (origin === ALLOWED_ORIGIN) { res.setHeader('Access-Control-Allow-Origin', ALLOWED_ORIGIN); } res.setHeader('Access-Control-Allow-Methods', 'POST, OPTIONS'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); res.setHeader('Vary', 'Origin'); } export default async function handler(req, res) { setCors(req, res); if (req.method === 'OPTIONS') { return res.status(204).end(); } const origin = req.headers.origin; if (origin && origin !== ALLOWED_ORIGIN) { return res.status(403).json({ error: 'Forbidden' }); } try { if (req.method !== 'POST') { return res.status(405).json({ error: 'Method not allowed' }); } const { rows } = req.body; if (!rows || !Array.isArray(rows)) { return res.status(400).json({ error: 'Missing rows data' }); } const articleNoIdx = 0; // Fetch IDs of products that have been manually edited so we don't overwrite them const { data: protectedProducts } = await supabase .from('products') .select('product_id') .or('status.eq.edited,status.eq.pending'); const protectedIds = new Set((protectedProducts || []).map(p => p.product_id)); const productsToUpsert = []; for (const row of rows) { const productId = String(row[articleNoIdx]); if (productId && productId.trim() !== '' && !protectedIds.has(productId)) { productsToUpsert.push({ product_id: productId, data: row, status: 'excel', updated_at: new Date().toISOString() }); } } console.log('Upserting', productsToUpsert.length, 'new/updated products to Supabase...'); // We can now use a normal upsert because we filtered out the manual edits const { error } = await supabase .from('products') .upsert(productsToUpsert, { onConflict: 'product_id' }); if (error) { console.error('Supabase upsert error:', error); return res.status(500).json({ error: error.message, detail: 'Failed to upsert products' }); } return res.json({ success: true, syncedCount: productsToUpsert.length }); } catch (err) { console.error('Handler error:', err); res.status(500).json({ error: err.message }); } }