37 lines
1.3 KiB
TypeScript
37 lines
1.3 KiB
TypeScript
import dayjs from "dayjs";
|
|
|
|
import type { IntegrationKindByCategory } from "@homarr/definitions";
|
|
import { createIntegrationAsync } from "@homarr/integrations";
|
|
import type { Station, Timetable } from "@homarr/integrations/types";
|
|
|
|
import { createCachedIntegrationRequestHandler } from "./lib/cached-integration-request-handler";
|
|
|
|
export const timetableSearchStationsRequestHandler = createCachedIntegrationRequestHandler<
|
|
Station[],
|
|
IntegrationKindByCategory<"timetable">,
|
|
{ query: string }
|
|
>({
|
|
async requestAsync(integration, input) {
|
|
const integrationInstance = await createIntegrationAsync(integration);
|
|
return await integrationInstance.searchStationsAsync(input.query);
|
|
},
|
|
queryKey: "timetableSearchStations",
|
|
cacheDuration: dayjs.duration(1, "day"),
|
|
});
|
|
|
|
export const timetableGetTimetableRequestHandler = createCachedIntegrationRequestHandler<
|
|
Timetable,
|
|
IntegrationKindByCategory<"timetable">,
|
|
{ stationId: string; limit: number }
|
|
>({
|
|
async requestAsync(integration, input) {
|
|
const integrationInstance = await createIntegrationAsync(integration);
|
|
return await integrationInstance.getTimetableAsync({
|
|
stationId: input.stationId,
|
|
limit: input.limit,
|
|
});
|
|
},
|
|
queryKey: "timetableGetTimetable",
|
|
cacheDuration: dayjs.duration(1, "minute"),
|
|
});
|