Danyi Dávid a909486396 * table filters
* image upload implemented now
* auth token renewal
2018-05-13 22:35:37 +02:00

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}`);
}
}