Nye-TeeOff/frontend/src/app/sitemap.ts

70 lines
1.8 KiB
TypeScript
Raw Normal View History

2026-04-12 22:07:51 +02:00
import type { MetadataRoute } from "next";
import { API_URL } from "@/config/constants";
import { getAvailablePlaceConfigs } from "@/app/facilityData";
import { buildAbsoluteUrl } from "@/app/seo";
type SitemapFacility = {
slug?: string;
status_updated_at?: string | null;
vtg_updated_at?: string | null;
};
const staticRoutes: MetadataRoute.Sitemap = [
{
url: buildAbsoluteUrl("/"),
lastModified: new Date(),
changeFrequency: "daily",
priority: 1,
},
{
url: buildAbsoluteUrl("/golfbaner"),
lastModified: new Date(),
changeFrequency: "daily",
priority: 0.95,
},
{
url: buildAbsoluteUrl("/medlemskap"),
lastModified: new Date(),
changeFrequency: "daily",
priority: 0.8,
},
{
url: buildAbsoluteUrl("/vtg"),
lastModified: new Date(),
changeFrequency: "daily",
priority: 0.8,
},
];
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
let facilities: SitemapFacility[] = [];
try {
const res = await fetch(`${API_URL}/facilities`, { cache: "no-store" });
if (res.ok) {
const data = await res.json();
facilities = Array.isArray(data) ? data : [];
}
} catch {
facilities = [];
}
const placeRoutes = getAvailablePlaceConfigs().map((slug) => ({
url: buildAbsoluteUrl(`/sted/${slug}`),
lastModified: new Date(),
changeFrequency: "daily" as const,
priority: slug === "norge" ? 0.9 : 0.75,
}));
const facilityRoutes = facilities
.filter((facility) => Boolean(facility.slug))
.map((facility) => ({
url: buildAbsoluteUrl(`/golfbaner/${facility.slug}`),
lastModified: facility.status_updated_at || facility.vtg_updated_at || new Date(),
changeFrequency: "daily" as const,
priority: 0.7,
}));
return [...staticRoutes, ...placeRoutes, ...facilityRoutes];
}