import { HttpHeaders, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { filter, Observable, Observer } from 'rxjs'; import { HttpService } from './shared/services/http.service'; import { URIService } from './app.uri'; import { URIKey } from '../app/utils/uri-enums'; @Injectable( { providedIn: 'root' } ) export class HttpURIService { constructor(private http: HttpService, private uriService: URIService) { } requestGET(uriKey: URIKey | string, params?: HttpParams): Observable { return new Observable((observer: Observer) => { this.uriService.canSubscribe.pipe(filter(val => val)).subscribe(val => { let uri: string = this.uriService.getURIForRequest(uriKey as URIKey) this.http.requestGET(uri, params).subscribe(t => { observer.next(t), observer.complete() }, error => { console.error(error); observer.next(error), observer.complete() }); }); }); } requestPOST(uriKey: URIKey | string, body: any, headers?: HttpHeaders, params?: HttpParams): Observable { return new Observable((observer: Observer) => { this.uriService.canSubscribe.pipe(filter(val => val)).subscribe(val => { let uri: string = this.uriService.getURIForRequest(uriKey as URIKey) this.http.requestPOST(uri, body, headers, params).subscribe( t => { observer.next(t), observer.complete() }, error => { console.error(error); observer.next(error), observer.complete() } ); }); }); } requestPOSTMultipart(uriKey: URIKey | string, body: any, headers?: HttpHeaders, params?: HttpParams): Observable { return new Observable((observer: Observer) => { this.uriService.canSubscribe.pipe(filter(val => val)).subscribe(val => { let uri: string = this.uriService.getURIForRequest(uriKey as URIKey) this.http.requestPOSTMultipart(uri, body, headers, params).subscribe( t => { observer.next(t), observer.complete() }, error => { console.error(error); observer.next(error), observer.complete() } ); }); }); } requestDELETE(uriKey: URIKey | string, params: HttpParams): Observable { return new Observable((observer: Observer) => { this.uriService.canSubscribe.pipe(filter(val => val)).subscribe(val => { let uri: string = this.uriService.getURIForRequest(uriKey as URIKey) this.http.requestDELETE(uri, params).subscribe(t => { observer.next(t), observer.complete() }, error => { console.error(error); observer.next(error), observer.complete() } ); }); }); } requestPATCH(uriKey: URIKey | string, body: any, headers?: HttpHeaders, params?: HttpParams): Observable { return new Observable((observer: Observer) => { this.uriService.canSubscribe.pipe(filter(val => val)).subscribe(val => { let uri: string = this.uriService.getURIForRequest(uriKey as URIKey) this.http.requestPATCH(uri, body, headers, params).subscribe(t => { observer.next(t), observer.complete() }, error => { console.error(error); observer.next(error), observer.complete() } ); }); }); } requestPUT(uriKey: URIKey | string, body: any, headers?: HttpHeaders, params?: HttpParams): Observable { return new Observable((observer: Observer) => { this.uriService.canSubscribe.pipe(filter(val => val)).subscribe(val => { let uri: string = this.uriService.getURIForRequest(uriKey as URIKey) this.http.requestPUT(uri, body, headers, params).subscribe(t => { observer.next(t), observer.complete() }, error => { console.error(error); observer.next(error), observer.complete() } ); }); }); } }