adds trail recommendation

This commit is contained in:
Christian Beutel
2025-01-09 20:32:44 +01:00
parent 70a41870af
commit 741ca10b69
7 changed files with 81 additions and 11 deletions

View File

@@ -122,9 +122,9 @@
alt="Empty state"
/>
{:else}
{#each { length: Math.min(data.trails.length, 4) } as _, i}
<a href="/trail/view/{data.trails[i].id}">
<TrailCard trail={data.trails[i]}></TrailCard></a
{#each data.trails as trail}
<a href="/trail/view/{trail.id}">
<TrailCard {trail}></TrailCard></a
>
{/each}
{/if}

View File

@@ -1,11 +1,11 @@
import type { Trail } from "$lib/models/trail";
import { categories_index } from "$lib/stores/category_store";
import { trails_index } from "$lib/stores/trail_store";
import { trails_recommend } from "$lib/stores/trail_store";
import type { ServerLoad } from "@sveltejs/kit";
export const load: ServerLoad = async ({ params, locals, fetch }) => {
const trails: Trail[] = await trails_index(20, true, fetch)
const trails: Trail[] = await trails_recommend(4, fetch)
await categories_index(fetch)
return {trails}
return { trails: trails ?? [] }
};

View File

@@ -2,7 +2,7 @@ import { TrailCreateSchema } from '$lib/models/api/trail_schema';
import type { Trail } from '$lib/models/trail';
import { pb } from '$lib/pocketbase';
import { Collection, create, handleError, list } from '$lib/util/api_util';
import { error, json, type RequestEvent } from '@sveltejs/kit';
import { json, type RequestEvent } from '@sveltejs/kit';
export async function GET(event: RequestEvent) {
try {

View File

@@ -1,5 +1,6 @@
import { type TrailBoundingBox, type TrailFilterValues } from '$lib/models/trail';
import { pb } from '$lib/pocketbase';
import { handleError } from '$lib/util/api_util';
import { error, json, type RequestEvent } from '@sveltejs/kit';
export async function GET(event: RequestEvent) {
@@ -15,6 +16,6 @@ export async function GET(event: RequestEvent) {
const r = await pb.collection('trails_bounding_box').getOne<TrailBoundingBox>(pb.authStore.model!.id)
return json(r)
} catch (e: any) {
throw error(e.status || 500, e);
throw handleError(e);
}
}

View File

@@ -1,5 +1,6 @@
import { type TrailFilterValues } from '$lib/models/trail';
import { pb } from '$lib/pocketbase';
import { handleError } from '$lib/util/api_util';
import { error, json, type RequestEvent } from '@sveltejs/kit';
export async function GET(event: RequestEvent) {
@@ -15,6 +16,6 @@ export async function GET(event: RequestEvent) {
const r = await pb.collection('trails_filter').getOne<TrailFilterValues>(pb.authStore.model!.id)
return json(r)
} catch (e: any) {
throw error(e.status || 500, e);
throw handleError(e);
}
}

View File

@@ -0,0 +1,32 @@
import { TrailRecommendSchema } from '$lib/models/api/trail_schema';
import type { Trail } from '$lib/models/trail';
import { pb } from '$lib/pocketbase';
import { handleError } from '$lib/util/api_util';
import { error, json, type RequestEvent } from '@sveltejs/kit';
export async function GET(event: RequestEvent) {
try {
const searchParams = Object.fromEntries(event.url.searchParams);
const safeSearchParams = TrailRecommendSchema.parse(searchParams);
const r = await event.fetch(pb.buildUrl("/trail/recommend?" + new URLSearchParams({
size: safeSearchParams.size?.toString() ?? ""
})));
const result: Trail[] = await r.json();
for (const t of result) {
if (!t.author || !pb.authStore.model) {
continue;
}
if (!t.expand) {
t.expand = {} as any
}
t.expand!.author = await pb.collection("users_anonymous").getOne(t.author);
}
return json(result)
} catch (e: any) {
throw handleError(e);
}
}