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 { 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(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 }) ); } } }