From 5f4611d65e40eae3ca6191a15f68d69ea5a1c4cb Mon Sep 17 00:00:00 2001 From: Kirill Rogovoy Date: Tue, 20 Jul 2021 21:24:52 +0300 Subject: WIP --- app_expo/services/api/character-api.ts | 37 ++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 app_expo/services/api/character-api.ts (limited to 'app_expo/services/api/character-api.ts') diff --git a/app_expo/services/api/character-api.ts b/app_expo/services/api/character-api.ts new file mode 100644 index 0000000..e28ec48 --- /dev/null +++ b/app_expo/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