Files
rossa-tech/rossa-tech-cli/src/app/services/database.service.ts
2023-05-11 13:06:17 +02:00

60 lines
2.0 KiB
TypeScript

import { Injectable } from '@angular/core';
import {
HttpClient,
HttpErrorResponse,
HttpHeaders,
} from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { catchError } from 'rxjs/operators';
import { environment } from 'src/environments/environment';
import { MeterData } from '../dataModels/Meterdata';
import { Meter } from '../dataModels/Meter';
@Injectable({
providedIn: 'root',
})
export class DatabaseService {
private baseUrl = environment.apiBaseUrl;
constructor(private http: HttpClient) {}
getMeterData(): Observable<MeterData[]> {
const url = `${this.baseUrl}/meter-data`;
return this.http.get<MeterData[]>(url).pipe(catchError(this.handleError));
}
getMeterDataByType(usageType: string): Observable<MeterData[]> {
const url = `${this.baseUrl}/meter-data?usageType=${usageType}`;
return this.http.get<MeterData[]>(url).pipe(catchError(this.handleError));
}
addMeterData(meterData: MeterData): Observable<MeterData> {
const url = `${this.baseUrl}/meter-data`;
return this.http
.post<MeterData>(url, meterData)
.pipe(catchError(this.handleError));
}
getMeters(): Observable<Meter[]> {
const url = `${this.baseUrl}/meters`;
return this.http.get<Meter[]>(url).pipe(catchError(this.handleError));
}
private handleError(error: HttpErrorResponse): Observable<never> {
// https://stackoverflow.com/questions/68655492/throwerrorerror-is-now-deprecated-but-there-is-no-new-errorhttperrorresponse
if (error.error instanceof ErrorEvent) {
// A client-side or network error occurred. Handle it accordingly.
console.error('An error occurred:', error.error.message);
} else {
// The backend returned an unsuccessful response code.
// The response body may contain clues as to what went wrong.
console.error(
`Backend returned code ${error.status}, ` + `body was: ${error.error}`
);
}
// Return an observable with a user-facing error message.
return throwError(() => error);
}
}