60 lines
2.0 KiB
TypeScript
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);
|
|
}
|
|
}
|