Files
Clima-Web/frontend/src/services/weatherService.ts

28 lines
1.1 KiB
TypeScript
Raw Normal View History

feat(project): Creación inicial del sistema de pronóstico del tiempo Se establece la arquitectura completa y la funcionalidad base para la aplicación de Clima. **Backend (.NET 9):** - Se crea la estructura de la solución con proyectos para API, Worker, Core, Infrastructure y Database. - Implementado un Worker Service (`SmnSyncService`) para realizar un proceso ETL programado. - Creado un `SmnEtlFetcher` que descarga y parsea el archivo de pronóstico de 5 días del SMN. - Configurada la persistencia en SQL Server usando Dapper para repositorios y FluentMigrator para migraciones. - Desarrollada una API (`WeatherController`) que expone un endpoint para obtener el pronóstico por estación. - Implementadas políticas de resiliencia con Polly para las llamadas HTTP. **Frontend (React + Vite):** - Creado un proyecto con Vite, React 19 y TypeScript. - Desarrollada una capa de servicio (`weatherService`) y un cliente `apiClient` (axios) para la comunicación con el backend. - Implementado un hook personalizado `useWeather` para encapsular la lógica de estado (carga, datos, error). - Diseñado un `WeatherDashboard` modular inspirado en Meteored, compuesto por tres widgets reutilizables: - `CurrentWeatherWidget`: Muestra las condiciones actuales. - `HourlyForecastWidget`: Muestra el pronóstico por hora para el día completo. - `DailyForecastWidget`: Muestra un resumen para los próximos 5 días. - Configurado el proxy del servidor de desarrollo de Vite para una experiencia local fluida.
2025-07-28 13:03:07 -03:00
import apiClient from '../api/apiClient';
import type { Pronostico } from '../types/weather';
/**
* Obtiene el pronóstico de 5 días para una estación específica desde la API.
*
* @param stationName El nombre de la estación a consultar (ej. "LA_PLATA_AERO").
* @returns Una promesa que se resuelve con un array de objetos Pronostico.
* @throws Lanza un error si la llamada a la API falla.
*/
export const getForecastByStation = async (stationName: string): Promise<Pronostico[]> => {
try {
// Construimos la URL del endpoint.
// Ejemplo: /api/Weather/LA_PLATA_AERO
const endpoint = `/api/Weather/${encodeURIComponent(stationName)}`;
// Hacemos la llamada GET usando nuestro cliente axios.
const response = await apiClient.get<Pronostico[]>(endpoint);
// Devolvemos los datos que vienen en la respuesta.
return response.data;
} catch (error) {
// Si hay un error, lo registramos en la consola y lo relanzamos
// para que el componente que llama pueda manejarlo.
console.error(`Error al obtener el pronóstico para la estación ${stationName}:`, error);
throw error;
}
};