70 lines
1.8 KiB
TypeScript
70 lines
1.8 KiB
TypeScript
|
|
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];
|
||
|
|
}
|