OpenMeteo fixes
This commit is contained in:
@@ -78,41 +78,54 @@ app.get('/api/hourly', asyncHandler(async (req, res) => {
|
||||
const coords = await getCoords()
|
||||
const now = new Date()
|
||||
now.setMinutes(0, 0, 0)
|
||||
const forecastLimit = new Date(now.getTime() + 24 * 60 * 60_000)
|
||||
const forecast24Limit = new Date(now.getTime() + 24 * 60 * 60_000)
|
||||
const start = req.query.start ? new Date(req.query.start) : now
|
||||
const end = req.query.end ? new Date(req.query.end) : forecastLimit
|
||||
const end = req.query.end ? new Date(req.query.end) : forecast24Limit
|
||||
|
||||
const [history, forecast24, forecast3rdParty] = await Promise.all([
|
||||
start.getTime() < now.getTime() ? queryHourly(start, now) : Promise.resolve([]),
|
||||
end.getTime() > now.getTime() ? getForecast().then(f => f.slots.filter(h => new Date(h.time) <= end)) : Promise.resolve([]),
|
||||
end.getTime() > forecastLimit.getTime() ? hourlyWeather(coords.latitude, coords.longitude, forecastLimit, end) : Promise.resolve([]),
|
||||
const [history, forecast24, meteo] = await Promise.all([
|
||||
start < now
|
||||
? queryHourly(start, now)
|
||||
: Promise.resolve([]),
|
||||
now < forecast24Limit && end > now
|
||||
? getForecast().then(f => f.slots.filter(h => new Date(h.time) >= now && new Date(h.time) <= Math.min(end, forecast24Limit)))
|
||||
: Promise.resolve([]),
|
||||
end > forecast24Limit
|
||||
? hourlyWeather(coords.latitude, coords.longitude, forecast24Limit, end)
|
||||
: Promise.resolve([]),
|
||||
])
|
||||
|
||||
const hourly = getCelestialForecast(coords.latitude, coords.longitude, [...history, ...forecast24, ...forecast3rdParty])
|
||||
res.json(filterArr(hourly, fields))
|
||||
}));
|
||||
const combined = getCelestialForecast(coords.latitude, coords.longitude, [...history, ...forecast24, ...meteo])
|
||||
res.json(filterArr(combined, fields))
|
||||
}))
|
||||
|
||||
// ── Daily ─────────────────────────────────────────────────────────────────────
|
||||
|
||||
app.get('/api/daily', asyncHandler(async (req, res) => {
|
||||
const { fields } = req.query
|
||||
const coords = await getCoords();
|
||||
const now = new Date()
|
||||
const coords = await getCoords()
|
||||
const now = new Date()
|
||||
const todayStart = new Date(now)
|
||||
todayStart.setHours(0, 0, 0, 0)
|
||||
const todayEnd = new Date(todayStart)
|
||||
todayEnd.setDate(todayStart.getDate() + 1)
|
||||
const start = req.query.start ? new Date(req.query.start) : todayEnd
|
||||
const end = req.query.end ? new Date(req.query.end) : new Date(todayEnd.getTime() + 5 * 24 * 60 * 60_000)
|
||||
const start = req.query.start ? new Date(req.query.start) : todayStart
|
||||
const end = req.query.end ? new Date(req.query.end) : new Date(todayEnd.getTime() + 5 * 24 * 60 * 60_000)
|
||||
|
||||
const [history, current, future] = Promise.all([
|
||||
start.getTime() < todayStart.getTime() ? queryDaily(start, todayStart) : Promise.resolve([]), // Historic
|
||||
start.getTime() <= todayStart.getTime() ? queryCurrent().then(resp => [resp]) : Promise.resolve([]), // Current
|
||||
start.getTime() >= todayEnd.getTime() ? dailyWeather(coords.latitude, coords.longitude, todayStart, end) : Promise.resolve([]), // Future
|
||||
]);
|
||||
const daily = [...history, ...current, ...getCelestialForecast(coords.latitude, coords.longitude, future)];
|
||||
const [history, current, future] = await Promise.all([
|
||||
start < todayStart
|
||||
? queryDaily(start, todayStart)
|
||||
: Promise.resolve([]),
|
||||
start <= todayStart && end >= todayStart
|
||||
? queryCurrent().then(resp => [resp])
|
||||
: Promise.resolve([]),
|
||||
end > todayEnd
|
||||
? dailyWeather(coords.latitude, coords.longitude, todayEnd, end)
|
||||
: Promise.resolve([]),
|
||||
])
|
||||
|
||||
const daily = getCelestialForecast(coords.latitude, coords.longitude, [...history, ...current, ...future])
|
||||
res.json(filterArr(daily, fields))
|
||||
}));
|
||||
}))
|
||||
|
||||
// ── Position ──────────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
Reference in New Issue
Block a user