From 05ed51db66614d70666018b341d01f6ffea8ca6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Andr=C3=A9?= Date: Mon, 26 Apr 2021 19:48:54 +0200 Subject: [PATCH] =?UTF-8?q?Ajout=20d'un=20cache=20sur=20les=20appels=20ver?= =?UTF-8?q?s=20les=20donn=C3=A9es=20de=20type=20"r=C3=A9f=C3=A9rentiel"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Front/skydivelogs-app/src/app/app.module.ts | 6 ++-- .../src/interceptor/caching.interceptor.ts | 8 +---- .../src/models/ref-data.enum.ts | 6 ++++ .../src/services/aircraft.service.ts | 4 ++- .../src/services/base.service.ts | 4 +++ .../src/services/dropzone.service.ts | 12 ++++---- .../src/services/gear.service.ts | 6 ++-- .../src/services/jump-type.service.ts | 6 ++-- .../src/services/service-comm.service.ts | 1 - .../src/services/service-ref-data.service.ts | 30 +++++++++++++++++++ 10 files changed, 59 insertions(+), 24 deletions(-) create mode 100644 Front/skydivelogs-app/src/models/ref-data.enum.ts create mode 100644 Front/skydivelogs-app/src/services/service-ref-data.service.ts diff --git a/Front/skydivelogs-app/src/app/app.module.ts b/Front/skydivelogs-app/src/app/app.module.ts index 0a22bfb..d2b7dd8 100644 --- a/Front/skydivelogs-app/src/app/app.module.ts +++ b/Front/skydivelogs-app/src/app/app.module.ts @@ -35,6 +35,7 @@ import { RequestCache } from "../services/request-cache.service"; import { AuthGuardService } from "../services/auth-guard.service"; import { ImageService } from "../services/image.service"; import { ConfigurationHelper } from "../services/configuration-helper"; +import { ServiceRefData } from "../services/service-ref-data.service"; import { BrowserAnimationsModule } from "@angular/platform-browser/animations"; import { FormsModule, ReactiveFormsModule } from "@angular/forms"; @@ -68,7 +69,6 @@ import { JumpInfosComponent } from './jump-infos/jump-infos.component'; const appRoutes: Routes = [ { path: "", component: DefaultComponent, canActivate: [AuthGuardService] }, - { path: "summary", component: SummaryComponent, @@ -109,10 +109,7 @@ const appRoutes: Routes = [ component: UserProfileComponent, canActivate: [AuthGuardService] }, - { path: "login", component: LoginComponent }, - - // { path: "**", redirectTo: "" }, ]; // Déclaration de la fonction d'initialisation de la configuration @@ -186,6 +183,7 @@ export function initConfig(configService: ConfigurationHelper) { RequestCache, ConfigurationHelper, DatePipe, + ServiceRefData, { provide: APP_INITIALIZER, useFactory: initConfig, deps: [ConfigurationHelper], multi: true }, { provide: HTTP_INTERCEPTORS, useClass: JwtAuthInterceptor, multi: true }, { provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true } diff --git a/Front/skydivelogs-app/src/interceptor/caching.interceptor.ts b/Front/skydivelogs-app/src/interceptor/caching.interceptor.ts index e52fbfc..896a069 100644 --- a/Front/skydivelogs-app/src/interceptor/caching.interceptor.ts +++ b/Front/skydivelogs-app/src/interceptor/caching.interceptor.ts @@ -1,11 +1,5 @@ import { Injectable } from '@angular/core'; -import { - HttpEvent, - HttpRequest, - HttpResponse, - HttpInterceptor, - HttpHandler -} from '@angular/common/http'; +import { HttpEvent, HttpRequest, HttpResponse, HttpInterceptor, HttpHandler } from '@angular/common/http'; import { Observable } from 'rxjs/Observable'; import { tap } from 'rxjs/operators'; diff --git a/Front/skydivelogs-app/src/models/ref-data.enum.ts b/Front/skydivelogs-app/src/models/ref-data.enum.ts new file mode 100644 index 0000000..100de58 --- /dev/null +++ b/Front/skydivelogs-app/src/models/ref-data.enum.ts @@ -0,0 +1,6 @@ +export enum RefData { + JumpType, + Aircraft, + Gear, + Dropzone +} diff --git a/Front/skydivelogs-app/src/services/aircraft.service.ts b/Front/skydivelogs-app/src/services/aircraft.service.ts index b8863d3..268b946 100644 --- a/Front/skydivelogs-app/src/services/aircraft.service.ts +++ b/Front/skydivelogs-app/src/services/aircraft.service.ts @@ -5,6 +5,7 @@ import { Observable } from 'rxjs'; import { AircraftResp, AircraftReq } from '../models/aircraft'; import { BaseService } from './base.service'; +import { RefData } from '../models/ref-data.enum'; @Injectable() export class AircraftService extends BaseService { @@ -20,7 +21,8 @@ export class AircraftService extends BaseService { url = `${this.apiUrl}/Aircraft`; } - return this.http.get>(url, { headers: this.headers }); + let callToApi = this.http.get>(url, { headers: this.headers }); + return this.serviceRefData.get>(RefData.Aircraft, callToApi); } public AddAircraft(aircraftName: string, dataImg: string) { diff --git a/Front/skydivelogs-app/src/services/base.service.ts b/Front/skydivelogs-app/src/services/base.service.ts index 42bd921..b609ea9 100644 --- a/Front/skydivelogs-app/src/services/base.service.ts +++ b/Front/skydivelogs-app/src/services/base.service.ts @@ -1,10 +1,12 @@ import { HttpHeaders } from '@angular/common/http'; import { ConfigurationHelper } from './configuration-helper'; +import { ServiceRefData } from './service-ref-data.service'; export class BaseService { protected headers: HttpHeaders; protected apiUrl: string; + protected serviceRefData : ServiceRefData; constructor() { ConfigurationHelper.settings.subscribe(settings => @@ -18,5 +20,7 @@ export class BaseService { this.apiUrl = tmpApiUrl + '/api'; } }); + + this.serviceRefData = new ServiceRefData(); } } diff --git a/Front/skydivelogs-app/src/services/dropzone.service.ts b/Front/skydivelogs-app/src/services/dropzone.service.ts index fee2b63..a4020e8 100644 --- a/Front/skydivelogs-app/src/services/dropzone.service.ts +++ b/Front/skydivelogs-app/src/services/dropzone.service.ts @@ -6,6 +6,7 @@ import { map } from "rxjs/operators"; import { DropZoneResp, DropZoneReq } from "../models/dropzone"; import { BaseService } from "./base.service"; +import { RefData } from "../models/ref-data.enum"; @Injectable() export class DropzoneService extends BaseService { @@ -21,11 +22,12 @@ export class DropzoneService extends BaseService { url = `${this.apiUrl}/DropZone`; } - return this.http.get>(url, { headers: this.headers }) - .pipe(map(response => { - const details = response.map(data => new DropZoneResp(data)); - return details; - })); + let callToApi = this.http.get>(url, { headers: this.headers }) + .pipe(map(response => { + const details = response.map(data => new DropZoneResp(data)); + return details; + })); + return this.serviceRefData.get>(RefData.Dropzone, callToApi); } public SetFavoriteDropZone(selectedDz: DropZoneResp): boolean { diff --git a/Front/skydivelogs-app/src/services/gear.service.ts b/Front/skydivelogs-app/src/services/gear.service.ts index d4db769..a8d201b 100644 --- a/Front/skydivelogs-app/src/services/gear.service.ts +++ b/Front/skydivelogs-app/src/services/gear.service.ts @@ -5,6 +5,7 @@ import { Observable } from "rxjs"; import { GearResp, GearReq } from "../models/gear"; import { BaseService } from "./base.service"; +import { RefData } from "../models/ref-data.enum"; @Injectable() export class GearService extends BaseService { @@ -13,9 +14,8 @@ export class GearService extends BaseService { } public getListOfGears(): Observable> { - return this.http.get>(`${this.apiUrl}/Gear`, { - headers: this.headers - }); + let callToApi = this.http.get>(`${this.apiUrl}/Gear`, { headers: this.headers }); + return this.serviceRefData.get>(RefData.Gear, callToApi); } public AddGear(name: string, diff --git a/Front/skydivelogs-app/src/services/jump-type.service.ts b/Front/skydivelogs-app/src/services/jump-type.service.ts index 3722b04..978aa09 100644 --- a/Front/skydivelogs-app/src/services/jump-type.service.ts +++ b/Front/skydivelogs-app/src/services/jump-type.service.ts @@ -5,6 +5,7 @@ import { Observable } from "rxjs"; import { JumpTypeResp, JumpTypeReq } from "../models/jumpType"; import { BaseService } from "./base.service"; +import { RefData } from "../models/ref-data.enum"; @Injectable() export class JumpTypeService extends BaseService { @@ -13,9 +14,8 @@ export class JumpTypeService extends BaseService { } public getListOfJumpTypes(): Observable> { - return this.http.get>(`${this.apiUrl}/JumpType`, { - headers: this.headers - }); + let callToApi = this.http.get>(`${this.apiUrl}/JumpType`, { headers: this.headers }); + return this.serviceRefData.get>(RefData.JumpType, callToApi); } public AddJumpType(jumptypetName: string) { diff --git a/Front/skydivelogs-app/src/services/service-comm.service.ts b/Front/skydivelogs-app/src/services/service-comm.service.ts index 6a565a9..252c5ac 100644 --- a/Front/skydivelogs-app/src/services/service-comm.service.ts +++ b/Front/skydivelogs-app/src/services/service-comm.service.ts @@ -2,7 +2,6 @@ import { Injectable } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; import { AddAction } from '../models/add-action.enum'; - @Injectable() export class ServiceComm { private componentTitleSource = new BehaviorSubject(''); diff --git a/Front/skydivelogs-app/src/services/service-ref-data.service.ts b/Front/skydivelogs-app/src/services/service-ref-data.service.ts new file mode 100644 index 0000000..e9f42f2 --- /dev/null +++ b/Front/skydivelogs-app/src/services/service-ref-data.service.ts @@ -0,0 +1,30 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs/Observable'; +import { tap } from 'rxjs/operators'; +import { RefData } from '../models/ref-data.enum'; +import { of } from 'rxjs'; +//import 'rxjs/add/observable/of'; + +@Injectable({ + providedIn: 'root', +}) +export class ServiceRefData { + private cache: Map>; + + constructor() { + this.cache = new Map>(); + } + + public get(key: RefData, callToApi: Observable) : Observable { + const cached = this.cache.get(key); + + if (cached) { + return cached; + } else { + return callToApi.pipe( + tap(event => { + this.cache.set(key, of(event)); + })); + } + } +}