+import { Injectable } from '@angular/core';
+import { Observable, of, EMPTY } from 'rxjs';
+import { Vorgang } from './vorgang';
+import { HttpClient, HttpHeaders } from '@angular/common/http';
+import { catchError, tap } from 'rxjs/operators';
+
+
+@Injectable({
+ providedIn: 'root'
+})
+export class VorgangService {
+
+ gpsUrl = 'http://localhost:1991/las/'; // URL to web api
+ httpOptions = {
+ headers: new HttpHeaders({
+ 'Content-Type': 'text/plain',
+ 'Accept': 'application/json'
+ })
+ };
+
+ constructor(private http: HttpClient) { }
+
+ /** POST: Einen neuen Vorgang erzeugen */
+ create(vorgang: Vorgang): Observable<Vorgang> {
+ return this
+ .http
+ .post<Vorgang>(
+ this.getUrlSave(vorgang.vbId),
+ vorgang.zustand,
+ this.httpOptions)
+ .pipe(
+ tap((result: Vorgang) => this.log(`Result for ${JSON.stringify(vorgang)}: ${JSON.stringify(result)}`)),
+ catchError(this.handleError<Vorgang>('create')));
+ }
+
+ getUrlSave(vbId: string): string {
+ return this.gpsUrl + vbId + '/save';
+ }
+
+ /**
+ * Handle Http operation that failed.
+ * Let the app continue.
+ * @param operation - name of the operation that failed
+ * @param result - optional value to return as the observable result
+ */
+ private handleError<T>(operation = 'operation', result?: T) {
+ return (error: any): Observable<T> => {
+
+ // TODO: send the error to remote logging infrastructure
+ console.error(error); // log to console instead
+
+ // TODO: better job of transforming error for user consumption
+ this.log(`${operation} failed: ${error.message}`);
+
+ // Let the app keep running by returning an empty result.
+ if (result === undefined) {
+ return EMPTY as Observable<T>;
+ } else {
+ return of(result as T);
+ }
+ };
+ }
+
+ private log(message: string) {
+ console.log(message);
+ }
+}