Added vorgang.service.ts and accompanying spec
[examples/angular-tour-of-heroes] / src / app / vorgang.service.ts
diff --git a/src/app/vorgang.service.ts b/src/app/vorgang.service.ts
new file mode 100644 (file)
index 0000000..dff07d2
--- /dev/null
@@ -0,0 +1,67 @@
+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);
+  }
+}