diff --git a/Front/skydivelogs-app/src/services/caching-interceptor.service.ts b/Front/skydivelogs-app/src/services/caching-interceptor.service.ts index 9c622c1..acb26f0 100644 --- a/Front/skydivelogs-app/src/services/caching-interceptor.service.ts +++ b/Front/skydivelogs-app/src/services/caching-interceptor.service.ts @@ -1,21 +1,21 @@ -import { Injectable } from "@angular/core"; +import { Injectable } from '@angular/core'; import { HttpEvent, HttpRequest, HttpResponse, HttpInterceptor, HttpHandler -} from "@angular/common/http"; +} from '@angular/common/http'; -import { Observable } from "rxjs/Observable"; -import { startWith, tap } from "rxjs/operators"; -import "rxjs/add/observable/of"; +import { Observable } from 'rxjs/Observable'; +import { startWith, tap } from 'rxjs/operators'; +import 'rxjs/add/observable/of'; -import { RequestCache } from "./request-cache.service"; +import { RequestCache } from './request-cache.service'; @Injectable() export class CachingInterceptor implements HttpInterceptor { - constructor(private cache: RequestCache) {} + constructor(private cache: RequestCache) { } intercept(req: HttpRequest, next: HttpHandler) { const cachedResponse = this.cache.get(req); diff --git a/Front/skydivelogs-app/src/services/request-cache.service.ts b/Front/skydivelogs-app/src/services/request-cache.service.ts index d334ff6..589c22f 100644 --- a/Front/skydivelogs-app/src/services/request-cache.service.ts +++ b/Front/skydivelogs-app/src/services/request-cache.service.ts @@ -1,31 +1,41 @@ -import { Injectable } from "@angular/core"; -import { HttpRequest, HttpResponse } from "@angular/common/http"; +import { Injectable } from '@angular/core'; +import { HttpRequest, HttpResponse } from '@angular/common/http'; -const maxAge = 30000; @Injectable() export class RequestCache { - cache = new Map(); + private cache: Map; + + constructor() { + this.cache = new Map(); + } get(req: HttpRequest): HttpResponse | undefined { - const url = req.urlWithParams + "-" + req.method; + const splittedUrl = req.urlWithParams.split('/'); + const url = splittedUrl[splittedUrl.length - 1] + '_' + req.method; + this.clearExpiredEntries(); const cached = this.cache.get(url); - if (!cached) { - return undefined; + let cachedResponse: HttpResponse; + if (cached) { + cachedResponse = cached.response; } - return cached.response; + return cachedResponse; } put(req: HttpRequest, response: HttpResponse): void { - //const url = req.url; - const url = req.urlWithParams + "-" + req.method; + const splittedUrl = req.urlWithParams.split('/'); + const url = splittedUrl[splittedUrl.length - 1] + '_' + req.method; + const entry = { url, response, lastRead: Date.now() }; this.cache.set(url, entry); + this.clearExpiredEntries(); + } - console.log(this.cache); - + private clearExpiredEntries(): void { + const maxAge = 30000; const expired = Date.now() - maxAge; + this.cache.forEach(expiredEntry => { if (expiredEntry.lastRead < expired) { this.cache.delete(expiredEntry.url);