adds trail recommend

This commit is contained in:
Christian Beutel
2025-01-09 20:35:43 +01:00
parent a2d5d5dc8d
commit 0afc565441
2 changed files with 32 additions and 11 deletions

View File

@@ -7,15 +7,15 @@ const TrailCreateSchema = z.object({
name: z.string().min(1, "required"),
description: z.string().optional(),
location: z.string().optional(),
date: z.string().optional().refine((val) => !val || !isNaN(Date.parse(val)), "invalid-date"),
date: z.string().optional().refine((val) => !val || !isNaN(Date.parse(val)), "invalid-date"),
public: z.boolean(),
difficulty: z.enum(["easy", "moderate", "difficult"]).optional(),
lat: z.number().min(-90).max(90).optional(),
lon: z.number().min(-180).max(180).optional(),
distance: z.number({coerce: true}).nonnegative().optional(),
elevation_gain: z.number({coerce: true}).nonnegative().optional(),
elevation_loss: z.number({coerce: true}).nonnegative().optional(),
duration: z.number({coerce: true}).nonnegative().optional(),
distance: z.number({ coerce: true }).nonnegative().optional(),
elevation_gain: z.number({ coerce: true }).nonnegative().optional(),
elevation_loss: z.number({ coerce: true }).nonnegative().optional(),
duration: z.number({ coerce: true }).nonnegative().optional(),
photos: z.array(z.string()).default([]),
thumbnail: z.number().int().nonnegative().optional(),
waypoints: z.array(z.string()).default([]),
@@ -30,15 +30,15 @@ const TrailUpdateSchema = z.object({
name: z.string(),
description: z.string().optional(),
location: z.string().optional(),
date: z.string().optional().refine((val) => !val || !isNaN(Date.parse(val)), "invalid-date"),
date: z.string().optional().refine((val) => !val || !isNaN(Date.parse(val)), "invalid-date"),
public: z.boolean().optional(),
difficulty: z.enum(["easy", "moderate", "difficult"]).optional(),
lat: z.number().min(-90).max(90).optional(),
lon: z.number().min(-180).max(180).optional(),
distance: z.number({coerce: true}).nonnegative().optional(),
elevation_gain: z.number({coerce: true}).nonnegative().optional(),
elevation_loss: z.number({coerce: true}).nonnegative().optional(),
duration: z.number({coerce: true}).nonnegative().optional(),
distance: z.number({ coerce: true }).nonnegative().optional(),
elevation_gain: z.number({ coerce: true }).nonnegative().optional(),
elevation_loss: z.number({ coerce: true }).nonnegative().optional(),
duration: z.number({ coerce: true }).nonnegative().optional(),
photos: z.array(z.string()).optional(),
"photos-": z.string().optional(),
"photos+": z.string().optional(),
@@ -49,4 +49,8 @@ const TrailUpdateSchema = z.object({
gpx: z.string().optional(),
}) satisfies ZodType<Partial<Trail>>
export { TrailCreateSchema, TrailUpdateSchema };
const TrailRecommendSchema = z.object({
size: z.number({ coerce: true }).optional()
})
export { TrailCreateSchema, TrailUpdateSchema, TrailRecommendSchema };

View File

@@ -37,6 +37,23 @@ export async function trails_index(perPage: number = 21, random: boolean = false
}
export async function trails_recommend(size: number, f: (url: RequestInfo | URL, config?: RequestInit) => Promise<Response> = fetch) {
const r = await f('/api/v1/trail/recommend?' + new URLSearchParams({
"size": size.toString(),
}), {
method: 'GET',
})
const response: Trail[] = await r.json()
if (!r.ok) {
const response = await r.json();
throw new APIError(r.status, response.message, response.detail)
}
return response;
}
export async function trails_search_filter(filter: TrailFilter, page: number = 1, f: (url: RequestInfo | URL, config?: RequestInit) => Promise<Response> = fetch) {
let filterText: string = buildFilterText(filter, true);