diff options
author | Kirill Rogovoy <[email protected]> | 2021-07-20 21:24:52 +0300 |
---|---|---|
committer | Kirill Rogovoy <[email protected]> | 2021-07-20 21:24:52 +0300 |
commit | 5f4611d65e40eae3ca6191a15f68d69ea5a1c4cb (patch) | |
tree | 273dfc086444533d86d580961c92ba8d14781a67 /app_expo/services/api/character-api.ts | |
parent | f0bf4e7afdcd8b02a62be45ab3e7d047ed865a79 (diff) |
WIP
Diffstat (limited to 'app_expo/services/api/character-api.ts')
-rw-r--r-- | app_expo/services/api/character-api.ts | 37 |
1 files changed, 37 insertions, 0 deletions
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<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' } + } + } +} |