mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-21 22:31:46 +00:00
0257e4e71e
First strangler migration (L1): /api/weather is served by a NestJS module.
- @trek/shared/weather Zod contract; Nest controller byte-identical to the legacy Express route (paths, query params, status codes, { error } bodies, lang default, ApiError/500 passthrough). Service reuses getWeather/getDetailedWeather (+ shared cache; MCP tools unchanged).
- Strangler routes /api/weather to Nest by default; the legacy Express route + its migration-time parity test were decommissioned in this PR.
- Frontend (FE2): weatherApi typed against the @trek/shared WeatherResult contract.
- Harness: reusable Nest-vs-Express parity harness, e2e harness (temp SQLite + seed/cookie helpers, real JwtAuthGuard), src/nest coverage gate raised to >=80%, src/nest test guide.
- Verified end-to-end on a prod mirror (dev1): 401/400/200 via Nest with real Open-Meteo data, Express route gone.
22 lines
987 B
TypeScript
22 lines
987 B
TypeScript
import { Injectable } from '@nestjs/common';
|
|
import type { WeatherResult } from '@trek/shared';
|
|
import { getWeather, getDetailedWeather } from '../../services/weatherService';
|
|
|
|
/**
|
|
* Thin Nest wrapper around the existing weather service. It delegates to the
|
|
* exact same `getWeather` / `getDetailedWeather` functions the legacy route and
|
|
* the MCP tools use, so behaviour — including the shared in-memory cache and the
|
|
* Open-Meteo calls — is identical. No logic is duplicated; the upstream service
|
|
* stays the single source of truth (still consumed by the MCP weather tools).
|
|
*/
|
|
@Injectable()
|
|
export class WeatherService {
|
|
get(lat: string, lng: string, date: string | undefined, lang: string): Promise<WeatherResult> {
|
|
return getWeather(lat, lng, date, lang) as Promise<WeatherResult>;
|
|
}
|
|
|
|
getDetailed(lat: string, lng: string, date: string, lang: string): Promise<WeatherResult> {
|
|
return getDetailedWeather(lat, lng, date, lang) as Promise<WeatherResult>;
|
|
}
|
|
}
|