import { NextResponse } from 'next/server'; import { productService } from '../../lib/services/productService'; import { PRODUCTS } from '../../lib/data/products'; export const dynamic = 'force-dynamic'; export const revalidate = 3600; // Revalidate every hour export async function GET() { const baseUrl = process.env.NEXT_PUBLIC_SITE_URL || 'https://canina.ir'; let productsList: any[] = []; try { const res = await productService.getProducts({ limit: 999 }); productsList = res.data && res.data.length > 0 ? res.data : PRODUCTS; } catch { productsList = PRODUCTS; } // Filter out noIndex products const indexableProducts = productsList.filter(p => !p.noIndex); const urlsXml = indexableProducts.map(product => { const slug = product.slug || product.artNo || product.id; const loc = `${baseUrl}/shop/${slug}`; const lastmod = product.updatedAt ? new Date(product.updatedAt).toISOString() : new Date().toISOString(); const primaryImg = product.ogImage || product.image; const title = product.nameFa || product.name || 'مکمل درمانی کنینا'; const imageTag = primaryImg ? ` ${primaryImg.startsWith('http') ? primaryImg : `${baseUrl}${primaryImg}`} ` : ''; return ` ${loc} ${lastmod} daily 0.9${imageTag} `; }).join('\n'); const xmlContent = ` ${urlsXml} `; return new NextResponse(xmlContent, { status: 200, headers: { 'Content-Type': 'application/xml; charset=utf-8', 'Cache-Control': 'public, max-age=3600, s-maxage=3600, stale-while-revalidate=86400', }, }); }