60 lines
1.7 KiB
TypeScript
60 lines
1.7 KiB
TypeScript
import { EventEmitter, Injectable } from '@angular/core';
|
|
import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from "@angular/router";
|
|
import { HttpClient } from "@angular/common/http";
|
|
import { Observable } from "rxjs/internal/Observable";
|
|
|
|
import { environment } from "../../environments/environment";
|
|
import { Awardee } from "./awardee";
|
|
|
|
@Injectable({
|
|
providedIn: 'root'
|
|
})
|
|
export class AwardeeService implements Resolve<Array<Awardee>> {
|
|
|
|
private apiEndPoint = `${environment.apiUrl}/awardee`;
|
|
private cachedAwardees: Array<Awardee> = [];
|
|
|
|
public changed: EventEmitter<Array<Awardee>> = new EventEmitter<Array<Awardee>>();
|
|
|
|
constructor(private httpClient: HttpClient) {}
|
|
|
|
public resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<Array<Awardee>> {
|
|
return this.getJudges().toPromise();
|
|
}
|
|
|
|
public getJudges(): Observable<Array<Awardee>> {
|
|
return this.httpClient.get<Array<Awardee>>(this.apiEndPoint);
|
|
}
|
|
|
|
get awardees(): Array<Awardee> {
|
|
return this.cachedAwardees;
|
|
}
|
|
|
|
set awardees(judges: Array<Awardee>) {
|
|
this.cachedAwardees = judges;
|
|
this.triggerChange();
|
|
}
|
|
|
|
public triggerChange() {
|
|
this.changed.emit(this.cachedAwardees);
|
|
}
|
|
|
|
public persist(judge: Awardee): Observable<Awardee> {
|
|
return judge.id === null
|
|
? this.create(judge)
|
|
: this.update(judge);
|
|
}
|
|
|
|
public create(awardee: Awardee): Observable<Awardee> {
|
|
return this.httpClient.post<Awardee>(this.apiEndPoint, awardee);
|
|
}
|
|
|
|
public update(awardee: Awardee): Observable<Awardee> {
|
|
return this.httpClient.put<Awardee>(`${this.apiEndPoint}/${awardee.id}`, awardee);
|
|
}
|
|
|
|
public delete(id: number): Observable<boolean> {
|
|
return this.httpClient.delete<boolean>(`${this.apiEndPoint}/${id}`);
|
|
}
|
|
}
|