76 lines
1.8 KiB
TypeScript
76 lines
1.8 KiB
TypeScript
import { Injectable } from '@angular/core';
|
|
|
|
import { Http, Response, Headers } from '@angular/http';
|
|
import { Observable } from 'rxjs/Rx';
|
|
import 'rxjs/add/operator/map'
|
|
|
|
import { Beer } from './beer';
|
|
|
|
|
|
@Injectable()
|
|
export class BeerService {
|
|
private baseUrl: string = 'http://api.brewerydb.com/v2';
|
|
private keyUrl: string = '?key=5d7547f6f876fced03cb9166dff0e578';
|
|
|
|
constructor(private http : Http){}
|
|
|
|
get(id: string): Observable<Beer> {
|
|
let beer$ = this.http
|
|
.get(
|
|
dbUrl(`${this.baseUrl}/beer/${id}${this.keyUrl}`)
|
|
, {headers: this.getHeaders()})
|
|
.map(mapBeer);
|
|
return beer$;
|
|
}
|
|
|
|
getAll(): Observable<Beer[]>{
|
|
let beers$ = this.http
|
|
.get(
|
|
dbUrl(`${this.baseUrl}/beers${this.keyUrl}&styleId=1`)
|
|
, {headers: this.getHeaders()})
|
|
.map(mapBeers);
|
|
return beers$;
|
|
}
|
|
|
|
search(name: string): Observable<Beer[]> {
|
|
let beers$ = this.http
|
|
.get(
|
|
dbUrl(`${this.baseUrl}/search${this.keyUrl}&type=beer&q=${name}`)
|
|
, {headers: this.getHeaders()})
|
|
.map(mapBeers);
|
|
return beers$;
|
|
}
|
|
|
|
private getHeaders(){
|
|
let headers = new Headers();
|
|
headers.append('Accept', 'application/json');
|
|
return headers;
|
|
}
|
|
}
|
|
|
|
function mapBeers(response:Response): Beer[]{
|
|
// The response of the API has a results
|
|
// property with the actual results
|
|
return response.json().data.map(toBeer)
|
|
}
|
|
|
|
function mapBeer(response:Response): Beer{
|
|
// toPerson looks just like in the previous example
|
|
return toBeer(response.json().data);
|
|
}
|
|
|
|
function toBeer(r:any): Beer{
|
|
let beer = <Beer>({
|
|
id: r.id,
|
|
name: r.name,
|
|
description: (r.description || "No description")
|
|
});
|
|
console.log('Parsed beer:', beer);
|
|
return beer;
|
|
}
|
|
|
|
function dbUrl(url:string) : string
|
|
{
|
|
return 'http://kvewijk.nl/dbprox/?path=' + encodeURIComponent(url);
|
|
}
|