Files
afrov2/app/sitemap.ts
streaper2 5f421b418e
Some checks failed
Build and Push App / build (push) Failing after 11m28s
Maj taxonomies
maj url photo
+ page 404
+ gestion programmation d'article
2026-05-03 21:22:12 +02:00

118 lines
3.2 KiB
TypeScript

import { MetadataRoute } from 'next';
import prisma from '@/lib/prisma';
export const dynamic = 'force-dynamic';
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
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;
}
}