feat: add searchable fish and waterbody pages

This commit is contained in:
ik
2026-09-07 16:39:28 +07:00
parent 7e60daed6f
commit 233c5887eb
10 changed files with 91 additions and 5 deletions
+6 -2
View File
@@ -1,5 +1,5 @@
import type { APIRoute } from "astro";
import { api, type Activity } from "../lib/api";
import { api, type Activity, type DictionaryItem } from "../lib/api";
const escapeXml = (value: string) => value.replace(/[<>&'\"]/g, character => ({ "<": "&lt;", ">": "&gt;", "&": "&amp;", "'": "&apos;", '"': "&quot;" })[character] ?? character);
@@ -7,8 +7,12 @@ export const GET: APIRoute = async ({ site }) => {
const origin = site?.origin ?? import.meta.env.PUBLIC_SITE_URL ?? "https://rf4spotter.ru";
const paths = new Set(["/", "/records", "/report", "/rules", "/privacy"]);
try {
const activity = await api<Activity[]>("/api/v1/activity?hours=72&limit=100");
const [activity, fishes, waters] = await Promise.all([api<Activity[]>("/api/v1/activity?hours=72&limit=100"), api<DictionaryItem[]>("/api/v1/fishes?limit=500"), api<DictionaryItem[]>("/api/v1/waterbodies?limit=500")]);
paths.add("/fish"); paths.add("/waterbodies");
fishes.forEach(item => paths.add(`/fish/${item.slug}`));
waters.forEach(item => paths.add(`/waterbodies/${item.slug}`));
activity.forEach(item => paths.add(`/spots/${item.spot_id}`));
activity.forEach(item => paths.add(`/waterbodies/${item.waterbody_slug}/${item.fish_slug}`));
} catch {
// A temporary API outage must not make the static part of the sitemap unavailable.
}