25 lines
1.2 KiB
TypeScript
25 lines
1.2 KiB
TypeScript
import type { MetadataRoute } from 'next';
|
|
import { db } from '@/lib/server/db';
|
|
|
|
export const dynamic = 'force-dynamic';
|
|
|
|
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
|
|
const base = (process.env.NEXT_PUBLIC_SITE_URL || 'http://localhost:3000').replace(/\/$/, '');
|
|
const now = new Date();
|
|
const staticPages: MetadataRoute.Sitemap = [
|
|
{ url: `${base}/`, lastModified: now, changeFrequency: 'weekly', priority: 1 },
|
|
{ url: `${base}/shop`, lastModified: now, changeFrequency: 'daily', priority: 0.9 },
|
|
{ url: `${base}/pricing`, lastModified: now, changeFrequency: 'monthly', priority: 0.6 },
|
|
{ url: `${base}/legal/privacy`, lastModified: now, changeFrequency: 'yearly', priority: 0.3 },
|
|
{ url: `${base}/legal/terms`, lastModified: now, changeFrequency: 'yearly', priority: 0.3 },
|
|
];
|
|
let products: MetadataRoute.Sitemap = [];
|
|
try {
|
|
const rows = await db.product.findMany({ where: { active: true }, select: { slug: true } });
|
|
products = rows.map((p) => ({ url: `${base}/shop/${p.slug}`, lastModified: now, changeFrequency: 'weekly', priority: 0.7 }));
|
|
} catch {
|
|
products = [];
|
|
}
|
|
return [...staticPages, ...products];
|
|
}
|