summaryrefslogtreecommitdiff
path: root/app_expo/services/api/character-api.ts
diff options
context:
space:
mode:
authorKirill Rogovoy <[email protected]>2021-07-20 21:24:52 +0300
committerKirill Rogovoy <[email protected]>2021-07-20 21:24:52 +0300
commit5f4611d65e40eae3ca6191a15f68d69ea5a1c4cb (patch)
tree273dfc086444533d86d580961c92ba8d14781a67 /app_expo/services/api/character-api.ts
parentf0bf4e7afdcd8b02a62be45ab3e7d047ed865a79 (diff)
WIP
Diffstat (limited to 'app_expo/services/api/character-api.ts')
-rw-r--r--app_expo/services/api/character-api.ts37
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' }
+ }
+ }
+}