import { MetadataRoute } from 'next'; import prisma from '@/lib/prisma'; export const dynamic = 'force-dynamic'; export default async function sitemap(): Promise { const baseUrl = process.env.NEXT_PUBLIC_APP_URL || 'https://afroprenariat.com'; // 1. Static routes const staticRoutes = [ { url: `${baseUrl}`, lastModified: new Date(), changeFrequency: 'daily' as const, priority: 1.0, }, { url: `${baseUrl}/annuaire`, lastModified: new Date(), changeFrequency: 'daily' as const, priority: 0.9, }, { url: `${baseUrl}/blog`, lastModified: new Date(), changeFrequency: 'daily' as const, priority: 0.9, }, { url: `${baseUrl}/afrolife`, lastModified: new Date(), changeFrequency: 'weekly' as const, priority: 0.8, }, { url: `${baseUrl}/cgu`, lastModified: new Date(), changeFrequency: 'yearly' as const, priority: 0.3, }, { url: `${baseUrl}/cgv`, lastModified: new Date(), changeFrequency: 'yearly' as const, priority: 0.3, }, ]; try { // 2. Fetch all active businesses const businesses = await prisma.business.findMany({ where: { isActive: true, isSuspended: false }, select: { id: true, slug: true, updatedAt: true }, }); const businessRoutes = businesses.map((business) => ({ url: `${baseUrl}/annuaire/${business.slug || business.id}`, lastModified: business.updatedAt, changeFrequency: 'weekly' as const, priority: 0.8, })); // 3. Fetch all blog posts const blogPosts = await prisma.blogPost.findMany({ where: { status: 'PUBLISHED', publishedAt: { lte: new Date() } }, select: { id: true, slug: true, updatedAt: true }, }); const blogRoutes = blogPosts.map((post) => ({ url: `${baseUrl}/blog/${post.slug || post.id}`, lastModified: post.updatedAt, changeFrequency: 'monthly' as const, priority: 0.7, })); // 4. Fetch all Afro Life (Interviews) const interviews = await prisma.interview.findMany({ where: { status: 'PUBLISHED', publishedAt: { lte: new Date() } }, select: { id: true, slug: true, updatedAt: true }, }); const afroLifeRoutes = interviews.map((interview) => ({ url: `${baseUrl}/afrolife/${interview.slug || interview.id}`, lastModified: interview.updatedAt, changeFrequency: 'monthly' as const, priority: 0.7, })); // 5. Fetch all Events const events = await prisma.event.findMany({ where: { status: 'PUBLISHED', publishedAt: { lte: new Date() } }, select: { id: true, slug: true, updatedAt: true }, }); const eventRoutes = events.map((event) => ({ url: `${baseUrl}/afrolife/${event.slug || event.id}`, lastModified: event.updatedAt, changeFrequency: 'monthly' as const, priority: 0.7, })); return [...staticRoutes, ...businessRoutes, ...blogRoutes, ...afroLifeRoutes, ...eventRoutes]; } catch (error) { console.error("Error generating sitemap:", error); // Fallback to only static routes if DB connection fails return staticRoutes; } }