From e5021187e96b78b53203bd95d08d6818aea47d17 Mon Sep 17 00:00:00 2001 From: "Thomas F. K. Jorna" Date: Wed, 14 Jul 2021 15:10:31 +0200 Subject: New Ignite 7.0.6 app --- app/services/api/character-api.ts | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 app/services/api/character-api.ts (limited to 'app/services/api/character-api.ts') diff --git a/app/services/api/character-api.ts b/app/services/api/character-api.ts new file mode 100644 index 0000000..7755006 --- /dev/null +++ b/app/services/api/character-api.ts @@ -0,0 +1,37 @@ +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" } + } + } +} -- cgit v1.2.3