Some checks failed
Build and Push App / build (push) Failing after 11m28s
maj url photo + page 404 + gestion programmation d'article
118 lines
3.2 KiB
TypeScript
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;
|
|
}
|
|
}
|