first commit

This commit is contained in:
Javier Rodríguez Domínguez
2026-05-15 18:22:55 +02:00
commit 68a4de6836
55 changed files with 10113 additions and 0 deletions
+116
View File
@@ -0,0 +1,116 @@
import { Component, OnInit, signal } from '@angular/core';
import { CommonModule } from '@angular/common';
import { MeteocatService } from '../../services/meteocat.service';
import { Municipi } from '../../models/municipi.model';
import { PrediccioDiaria } from '../../models/prediccio-diaria.model';
import { PrediccioHoraria } from '../../models/prediccio-horaria.model';
import { EstacioMesCercanaResponse } from '../../models/estacio-mes-cercana.model';
import { PrediccioDiariaComponent } from '../prediccio-diaria/prediccio-diaria';
import { PrediccioHorariaComponent } from '../prediccio-horaria/prediccio-horaria';
@Component({
selector: 'app-home',
imports: [CommonModule, PrediccioDiariaComponent, PrediccioHorariaComponent],
templateUrl: './home.html',
styleUrl: './home.scss',
})
export class Home implements OnInit {
// Lliçà d'Amunt por defecto
readonly municipiCodi = '081075';
municipi = signal<Municipi | null>(null);
prediccioDiaria = signal<PrediccioDiaria[]>([]);
prediccioHoraria = signal<PrediccioHoraria[]>([]);
estacioInfo = signal<EstacioMesCercanaResponse | null>(null);
loading = signal(true);
error = signal<string | null>(null);
constructor(private meteocatService: MeteocatService) {}
ngOnInit(): void {
this.loadWeatherData();
}
loadWeatherData(): void {
this.loading.set(true);
this.error.set(null);
// Cargar municipio
this.meteocatService.getMunicipiByCode(this.municipiCodi).subscribe({
next: (municipi) => {
this.municipi.set(municipi);
},
error: (err) => {
console.error('Error al cargar municipio:', err);
this.error.set('Error al cargar información del municipio');
}
});
// Cargar predicción diaria
this.meteocatService.getPrediccioDiaria(this.municipiCodi).subscribe({
next: (prediccions) => {
this.prediccioDiaria.set(prediccions);
},
error: (err) => {
console.error('Error al cargar predicción diaria:', err);
this.error.set('Error al cargar predicción diaria');
}
});
// Cargar predicción horaria
this.meteocatService.getPrediccioHoraria(this.municipiCodi).subscribe({
next: (prediccions) => {
// Filtrar solo predicciones desde la hora actual y limitamos a 48 horas
const now = new Date();
const filtered = prediccions
.filter(p => {
const predDate = new Date(p.dataHora);
return predDate >= now;
})
.slice(0, 48); // Limitar a 48 horas
this.prediccioHoraria.set(filtered);
this.loading.set(false);
},
error: (err) => {
console.error('Error al cargar predicción horaria:', err);
this.error.set('Error al cargar predicción horaria');
this.loading.set(false);
}
});
// Cargar estación XEMA más cercana
this.meteocatService.getEstacioCercana(this.municipiCodi).subscribe({
next: (response) => {
this.estacioInfo.set(response);
},
error: (err) => {
console.error('Error al cargar estación XEMA:', err);
}
});
}
getCurrentTemperature(): number | null {
const horariaData = this.prediccioHoraria();
if (horariaData && horariaData.length > 0) {
return horariaData[0].temperatura;
}
return null;
}
getTodayMinMax(): { min: number; max: number } | null {
const diariaData = this.prediccioDiaria();
if (diariaData && diariaData.length > 0) {
return {
min: diariaData[0].temperaturaMinima,
max: diariaData[0].temperaturaMaxima
};
}
return null;
}
refresh(): void {
this.loadWeatherData();
}
}