diff options
Diffstat (limited to 'app/services/api/character-api.ts')
-rw-r--r-- | app/services/api/character-api.ts | 37 |
1 files changed, 37 insertions, 0 deletions
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<GetCharactersResult> { + try { + // make the api call + const response: ApiResponse<any> = 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" } + } + } +} |