import { ApiResponse } from "apisauce" import { Api } from "./api" import { GetCharactersResult } from "./api.types" import { getGeneralApiProblem } from "./api-problem" const API_PAGE_SIZE = 50 export class CharacterApi { private api: Api constructor(api: Api) { this.api = api } async getCharacters(): Promise { try { // make the api call const response: ApiResponse = await this.api.apisauce.get( "https://raw.githubusercontent.com/infinitered/ignite/master/data/rick-and-morty.json", { amount: API_PAGE_SIZE }, ) // the typical ways to die when calling an api if (!response.ok) { const problem = getGeneralApiProblem(response) if (problem) return problem } const characters = response.data.results return { kind: "ok", characters } } catch (e) { __DEV__ && console.tron.log(e.message) return { kind: "bad-data" } } } }