angular-covid/src/app/service/all/news/news.service.ts
2025-04-01 15:11:17 +02:00

44 lines
No EOL
2 KiB
TypeScript

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { NewsResponse } from '@interface/news'; // Assure-toi que le chemin est correct
import { tap } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class NewsService {
private apiKey: string = 'e9bb2770d3374edea421bcadbecdca5c';
private apiUrl: string = `https://newsapi.org/v2/everything?q=covid&language=fr&apiKey=${this.apiKey}`;
private storageKey: string = 'newsData'; // Clé utilisée pour le localStorage
private lastUpdateKey: string = 'lastUpdate'; // Clé pour stocker la date de la dernière mise à jour
private cacheDuration: number = 60 * 60 * 1000; // Durée en millisecondes (par exemple, 1 heure)
constructor(private http: HttpClient) {}
// Méthode pour récupérer les articles de l'API ou du localStorage
getNews(): Observable<NewsResponse> {
const storedData = localStorage.getItem(this.storageKey);
const lastUpdate = localStorage.getItem(this.lastUpdateKey);
// Vérifie si les données existent et si elles sont encore valides
const currentTime = new Date().getTime();
if (storedData && lastUpdate && (currentTime - Number(lastUpdate)) < this.cacheDuration) {
// Si les données sont présentes et récentes (moins de 1 heure par exemple), on les retourne
return new Observable(observer => {
observer.next(JSON.parse(storedData)); // On envoie les données stockées
observer.complete();
});
} else {
// Sinon, on effectue la requête à l'API
return this.http.get<NewsResponse>(this.apiUrl).pipe(
tap(response => {
// On stocke la réponse dans le localStorage et la date de mise à jour
localStorage.setItem(this.storageKey, JSON.stringify(response));
localStorage.setItem(this.lastUpdateKey, currentTime.toString()); // On enregistre l'heure de la mise à jour
})
);
}
}
}