adds trail recommend
This commit is contained in:
@@ -7,15 +7,15 @@ const TrailCreateSchema = z.object({
|
|||||||
name: z.string().min(1, "required"),
|
name: z.string().min(1, "required"),
|
||||||
description: z.string().optional(),
|
description: z.string().optional(),
|
||||||
location: 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(),
|
public: z.boolean(),
|
||||||
difficulty: z.enum(["easy", "moderate", "difficult"]).optional(),
|
difficulty: z.enum(["easy", "moderate", "difficult"]).optional(),
|
||||||
lat: z.number().min(-90).max(90).optional(),
|
lat: z.number().min(-90).max(90).optional(),
|
||||||
lon: z.number().min(-180).max(180).optional(),
|
lon: z.number().min(-180).max(180).optional(),
|
||||||
distance: z.number({coerce: true}).nonnegative().optional(),
|
distance: z.number({ coerce: true }).nonnegative().optional(),
|
||||||
elevation_gain: z.number({coerce: true}).nonnegative().optional(),
|
elevation_gain: z.number({ coerce: true }).nonnegative().optional(),
|
||||||
elevation_loss: z.number({coerce: true}).nonnegative().optional(),
|
elevation_loss: z.number({ coerce: true }).nonnegative().optional(),
|
||||||
duration: z.number({coerce: true}).nonnegative().optional(),
|
duration: z.number({ coerce: true }).nonnegative().optional(),
|
||||||
photos: z.array(z.string()).default([]),
|
photos: z.array(z.string()).default([]),
|
||||||
thumbnail: z.number().int().nonnegative().optional(),
|
thumbnail: z.number().int().nonnegative().optional(),
|
||||||
waypoints: z.array(z.string()).default([]),
|
waypoints: z.array(z.string()).default([]),
|
||||||
@@ -30,15 +30,15 @@ const TrailUpdateSchema = z.object({
|
|||||||
name: z.string(),
|
name: z.string(),
|
||||||
description: z.string().optional(),
|
description: z.string().optional(),
|
||||||
location: 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(),
|
public: z.boolean().optional(),
|
||||||
difficulty: z.enum(["easy", "moderate", "difficult"]).optional(),
|
difficulty: z.enum(["easy", "moderate", "difficult"]).optional(),
|
||||||
lat: z.number().min(-90).max(90).optional(),
|
lat: z.number().min(-90).max(90).optional(),
|
||||||
lon: z.number().min(-180).max(180).optional(),
|
lon: z.number().min(-180).max(180).optional(),
|
||||||
distance: z.number({coerce: true}).nonnegative().optional(),
|
distance: z.number({ coerce: true }).nonnegative().optional(),
|
||||||
elevation_gain: z.number({coerce: true}).nonnegative().optional(),
|
elevation_gain: z.number({ coerce: true }).nonnegative().optional(),
|
||||||
elevation_loss: z.number({coerce: true}).nonnegative().optional(),
|
elevation_loss: z.number({ coerce: true }).nonnegative().optional(),
|
||||||
duration: z.number({coerce: true}).nonnegative().optional(),
|
duration: z.number({ coerce: true }).nonnegative().optional(),
|
||||||
photos: z.array(z.string()).optional(),
|
photos: z.array(z.string()).optional(),
|
||||||
"photos-": z.string().optional(),
|
"photos-": z.string().optional(),
|
||||||
"photos+": z.string().optional(),
|
"photos+": z.string().optional(),
|
||||||
@@ -49,4 +49,8 @@ const TrailUpdateSchema = z.object({
|
|||||||
gpx: z.string().optional(),
|
gpx: z.string().optional(),
|
||||||
}) satisfies ZodType<Partial<Trail>>
|
}) satisfies ZodType<Partial<Trail>>
|
||||||
|
|
||||||
export { TrailCreateSchema, TrailUpdateSchema };
|
const TrailRecommendSchema = z.object({
|
||||||
|
size: z.number({ coerce: true }).optional()
|
||||||
|
})
|
||||||
|
|
||||||
|
export { TrailCreateSchema, TrailUpdateSchema, TrailRecommendSchema };
|
||||||
|
|||||||
@@ -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) {
|
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);
|
let filterText: string = buildFilterText(filter, true);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user