68 lines
2.0 KiB
TypeScript
68 lines
2.0 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 apiEndPointImage = `${environment.apiUrl}/awardee-image`;
|
|
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(awardee: Awardee): Observable<Awardee> {
|
|
return awardee.id === null
|
|
? this.create(awardee)
|
|
: this.update(awardee);
|
|
}
|
|
|
|
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 saveImage(slug: string, image: File, type: string) {
|
|
let form = new FormData();
|
|
form.append('image', image);
|
|
return this.httpClient.post<Awardee>(`${this.apiEndPointImage}/${type}/${slug}`, form);
|
|
}
|
|
|
|
public delete(id: number): Observable<boolean> {
|
|
return this.httpClient.delete<boolean>(`${this.apiEndPoint}/${id}`);
|
|
}
|
|
}
|