75 lines
2.3 KiB
TypeScript
75 lines
2.3 KiB
TypeScript
import { HttpClient, HttpHeaders } from '@angular/common/http';
|
|
import { Injectable } from '@angular/core';
|
|
import { catchError, mergeMap, Observable, of, tap } from 'rxjs';
|
|
import { Pokemon } from './pokemon';
|
|
|
|
@Injectable()
|
|
export class PokemonService {
|
|
constructor(private http: HttpClient) {}
|
|
|
|
getPokemonList(): Observable<Pokemon[]> {
|
|
return this.http.get<Pokemon[]>('api/pokemons').pipe(
|
|
tap((pokemonList) => this.log(pokemonList)),
|
|
catchError((error) => this.handleError(error, []))
|
|
);
|
|
}
|
|
|
|
getPokemonById(pokemonId: number): Observable<Pokemon | undefined> {
|
|
return this.http.get<Pokemon>(`api/pokemons/${pokemonId}`).pipe(
|
|
tap((pokemon) => this.log(pokemon)),
|
|
catchError((error) => this.handleError(error, undefined))
|
|
);
|
|
}
|
|
|
|
getPokemonTypeList(): Observable<string[]> {
|
|
return this.http.get<Pokemon[]>('api/pokemons').pipe(
|
|
mergeMap((pokemons: Pokemon[]) => {
|
|
const set = new Set<string>();
|
|
pokemons.forEach((pokemon) =>
|
|
pokemon.types.forEach((type) => set.add(type))
|
|
);
|
|
return [Array.from(set.values())];
|
|
}),
|
|
tap((pokemon) => this.log(pokemon)),
|
|
catchError((error) => this.handleError(error, []))
|
|
);
|
|
}
|
|
|
|
updatePokemon(pokemon: Pokemon): Observable<null> {
|
|
const httpOptions = {
|
|
headers: new HttpHeaders({ 'Content-Type': 'application/json' }),
|
|
};
|
|
return this.http.put('api/pokemons', pokemon, httpOptions).pipe(
|
|
tap((response) => this.log(response)),
|
|
catchError((error) => this.handleError(error, null))
|
|
);
|
|
}
|
|
|
|
addPokemon(pokemon: Pokemon): Observable<Pokemon> {
|
|
const httpOptions = {
|
|
headers: new HttpHeaders({ 'Content-Type': 'application/json' }),
|
|
};
|
|
|
|
return this.http.post<Pokemon>('api/pokemons', pokemon, httpOptions).pipe(
|
|
tap((response) => this.log(response)),
|
|
catchError((error) => this.handleError(error, null))
|
|
);
|
|
}
|
|
|
|
deletePokemonById(pokemon: Pokemon): Observable<null> {
|
|
return this.http.delete(`api/pokemons/${pokemon.id}`).pipe(
|
|
tap((response) => this.log(response)),
|
|
catchError((error) => this.handleError(error, null))
|
|
);
|
|
}
|
|
|
|
private log(response: any) {
|
|
console.table(response);
|
|
}
|
|
|
|
private handleError(error: Error, errorValue: any) {
|
|
console.error(error);
|
|
return of(errorValue);
|
|
}
|
|
}
|