import type { MetadataRoute } from "next"; import { CategoryService } from "@/services/category.service"; import { ContentService } from "@/services/content.service"; export default async function sitemap(): Promise { const baseUrl = process.env.NEXT_PUBLIC_APP_URL || "https://memegoat.local"; // Pages statiques const routes: MetadataRoute.Sitemap = ["", "/trends", "/recent"].map( (route) => ({ url: `${baseUrl}${route}`, lastModified: new Date(), changeFrequency: "daily" as const, priority: route === "" ? 1 : 0.8, }), ); // Catégories try { const categories = await CategoryService.getAll(); const categoryRoutes = categories.map((category) => ({ url: `${baseUrl}/category/${category.slug}`, lastModified: new Date(), changeFrequency: "weekly" as const, priority: 0.6, })); routes.push(...categoryRoutes); } catch (_error) { console.error("Sitemap: Failed to fetch categories"); } // Mèmes (limité aux 100 derniers pour éviter un sitemap trop gros d'un coup) try { const contents = await ContentService.getRecent(100, 0); const memeRoutes = contents.data.map((meme) => ({ url: `${baseUrl}/meme/${meme.slug}`, lastModified: new Date(meme.updatedAt), changeFrequency: "monthly" as const, priority: 0.5, })); routes.push(...memeRoutes); } catch (_error) { console.error("Sitemap: Failed to fetch memes"); } return routes; }