import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; import { User } from '../core/user'; const url = '/api/users'; const serviceName = 'UserService'; @Injectable({ providedIn: 'root', }) export class UserService { constructor(private http: HttpClient, private log: ErrorLoggerService) {} get(id: string | null): Observable { const getUrl: string = id === null ? `${url}` : `${url}/${id}`; return this.http .get(getUrl) .pipe(catchError(this.log.handleError(serviceName, `get id=${id}`))) as Observable; } list(): Observable { return this.http .get(`${url}/list`) .pipe(catchError(this.log.handleError(serviceName, 'list'))) as Observable; } listOfNames(): Observable { return this.http .get(`${url}/active`) .pipe(catchError(this.log.handleError(serviceName, 'list'))) as Observable; } save(user: User): Observable { return this.http .post(`${url}`, user) .pipe(catchError(this.log.handleError(serviceName, 'save'))) as Observable; } update(user: User): Observable { return this.http .put(`${url}/${user.id}`, user) .pipe(catchError(this.log.handleError(serviceName, 'update'))) as Observable; } updateMe(user: User): Observable { return this.http .put(`${url}/me`, user) .pipe(catchError(this.log.handleError(serviceName, 'update'))) as Observable; } saveOrUpdate(user: User): Observable { if (!user.id) { return this.save(user); } return this.update(user); } delete(id: string): Observable { return this.http .delete(`${url}/${id}`) .pipe(catchError(this.log.handleError(serviceName, 'delete'))) as Observable; } }