import { HttpClient, HttpHeaders, httpResource, HttpResourceRef } from '@angular/common/http'; import { Injectable, Signal, inject } from '@angular/core'; import { Observable } from 'rxjs'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; import { Printer } from '../core/printer'; const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }), }; const url = '/api/printers'; const serviceName = 'PrinterService'; @Injectable({ providedIn: 'root', }) export class PrinterService { private http = inject(HttpClient); private log = inject(ErrorLoggerService); get(id: Signal): HttpResourceRef { return httpResource(() => { const idVal = id(); return idVal === null || idVal === undefined ? url : `${url}/${idVal}`; }); } list(): HttpResourceRef { return httpResource(() => `${url}/list`); } save(printer: Printer): Observable { return this.http .post(url, printer, httpOptions) .pipe(catchError(this.log.handleError(serviceName, 'save'))) as Observable; } update(printer: Printer): Observable { return this.http .put(`${url}/${printer.id}`, printer, httpOptions) .pipe(catchError(this.log.handleError(serviceName, 'update'))) as Observable; } saveOrUpdate(printer: Printer): Observable { if (!printer.id) { return this.save(printer); } return this.update(printer); } delete(id: string): Observable { return this.http .delete(`${url}/${id}`, httpOptions) .pipe(catchError(this.log.handleError(serviceName, 'delete'))) as Observable; } }