almeira-web/dripzone-app/src/app/api/catalog/feed.csv/route.ts

47 lines
1.6 KiB
TypeScript

import { NextResponse } from 'next/server';
import { dataService } from '@/lib/data-service';
import { generateWhatsAppCatalogCsv } from '@/lib/whatsapp-catalog';
import { getProductsFromAppwrite } from '@/lib/server-appwrite';
export const dynamic = 'force-dynamic';
export const revalidate = 0;
export async function GET() {
try {
let products = dataService.getProducts();
// Sincronizar siempre con Appwrite para garantizar catálogo en tiempo real
try {
const appwriteProducts = await getProductsFromAppwrite();
if (appwriteProducts && appwriteProducts.length > 0) {
const existingIds = new Set(products.map((p) => p.id));
for (const ap of appwriteProducts) {
if (!existingIds.has(ap.id)) {
dataService.addProduct(ap);
}
}
products = dataService.getProducts();
}
} catch (e: any) {
console.warn('Error sincronizando productos con Appwrite para CSV Feed:', e.message);
}
const csv = generateWhatsAppCatalogCsv(products);
return new Response(csv, {
status: 200,
headers: {
'Content-Type': 'text/csv; charset=utf-8',
'Content-Disposition': 'inline; filename="dripzone_whatsapp_catalog.csv"',
'Cache-Control': 'public, max-age=60, s-maxage=60, stale-while-revalidate=120',
},
});
} catch (error: any) {
console.error('[WhatsApp Catalog Feed CSV] Error:', error);
return new NextResponse('error,message\n500,"Error generating CSV catalog feed"', {
status: 500,
headers: { 'Content-Type': 'text/csv; charset=utf-8' },
});
}
}