Improve location selection for weather

This commit is contained in:
Meier Lukas
2023-06-10 23:53:04 +02:00
parent a5f3d48a71
commit d00a317202
10 changed files with 363 additions and 112 deletions

View File

@@ -12,6 +12,7 @@ import { mediaServerRouter } from './routers/media-server';
import { overseerrRouter } from './routers/overseerr';
import { usenetRouter } from './routers/usenet/router';
import { calendarRouter } from './routers/calendar';
import { weatherRouter } from './routers/weather';
/**
* This is the primary router for your server.
@@ -32,6 +33,7 @@ export const rootRouter = createTRPCRouter({
overseerr: overseerrRouter,
usenet: usenetRouter,
calendar: calendarRouter,
weather: weatherRouter,
});
// export type definition of API

View File

@@ -0,0 +1,58 @@
import { z } from 'zod';
import { createTRPCRouter, publicProcedure } from '../trpc';
const citySchema = z.object({
id: z.number(),
name: z.string(),
country: z.string(),
country_code: z.string(),
latitude: z.number(),
longitude: z.number(),
population: z.number().optional(),
});
const weatherSchema = z.object({
current_weather: z.object({
weathercode: z.number(),
temperature: z.number(),
}),
daily: z.object({
temperature_2m_max: z.array(z.number()),
temperature_2m_min: z.array(z.number()),
}),
});
export const weatherRouter = createTRPCRouter({
findCity: publicProcedure
.input(
z.object({
query: z.string().min(2),
})
)
.output(
z.object({
results: z.array(citySchema),
})
)
.query(async ({ input }) => {
const res = await fetch(`https://geocoding-api.open-meteo.com/v1/search?name=${input.query}`);
return res.json();
}),
at: publicProcedure
.input(
z.object({
longitude: z.number(),
latitude: z.number(),
})
)
.output(weatherSchema)
.query(async ({ input }) => {
const res = await fetch(
`https://api.open-meteo.com/v1/forecast?latitude=${input.latitude}&longitude=${input.longitude}&daily=weathercode,temperature_2m_max,temperature_2m_min&current_weather=true&timezone=Europe%2FLondon`
);
return res.json();
}),
});
export type City = z.infer<typeof citySchema>;
export type Weather = z.infer<typeof weatherSchema>;