diff options
author | Kirill Rogovoy <[email protected]> | 2021-07-19 20:06:08 +0300 |
---|---|---|
committer | Kirill Rogovoy <[email protected]> | 2021-07-19 20:06:08 +0300 |
commit | f0bf4e7afdcd8b02a62be45ab3e7d047ed865a79 (patch) | |
tree | 575c0ff2cbb846252bd2e494c81c396846aab2f6 /app/services/api | |
parent | 67ad38d0a7cd319623e9f41c0c381ed5c5f6f973 (diff) |
Apply Prettier
Diffstat (limited to 'app/services/api')
-rw-r--r-- | app/services/api/api-config.ts | 4 | ||||
-rw-r--r-- | app/services/api/api-problem.test.ts | 94 | ||||
-rw-r--r-- | app/services/api/api-problem.ts | 56 | ||||
-rw-r--r-- | app/services/api/api.ts | 18 | ||||
-rw-r--r-- | app/services/api/api.types.ts | 16 | ||||
-rw-r--r-- | app/services/api/character-api.ts | 14 | ||||
-rw-r--r-- | app/services/api/index.ts | 4 |
7 files changed, 122 insertions, 84 deletions
diff --git a/app/services/api/api-config.ts b/app/services/api/api-config.ts index 3061563..b939c0e 100644 --- a/app/services/api/api-config.ts +++ b/app/services/api/api-config.ts @@ -1,7 +1,7 @@ // Use this import if you want to use "env.js" file // const { API_URL } = require("../../config/env") // Or just specify it directly like this: -const API_URL = "http://example.com" +const API_URL = 'http://example.com' /** * The options used to configure the API. @@ -22,6 +22,6 @@ export interface ApiConfig { * The default configuration for the app. */ export const DEFAULT_API_CONFIG: ApiConfig = { - url: API_URL || "https://jsonplaceholder.typicode.com", + url: API_URL || 'https://jsonplaceholder.typicode.com', timeout: 10000, } diff --git a/app/services/api/api-problem.test.ts b/app/services/api/api-problem.test.ts index ccd35c9..2b37aa9 100644 --- a/app/services/api/api-problem.test.ts +++ b/app/services/api/api-problem.test.ts @@ -1,72 +1,104 @@ -import { getGeneralApiProblem } from "./api-problem" -import { ApiErrorResponse } from "apisauce" +import { getGeneralApiProblem } from './api-problem' +import { ApiErrorResponse } from 'apisauce' -test("handles connection errors", () => { - expect(getGeneralApiProblem({ problem: "CONNECTION_ERROR" } as ApiErrorResponse<null>)).toEqual({ - kind: "cannot-connect", +test('handles connection errors', () => { + expect( + getGeneralApiProblem({ + problem: 'CONNECTION_ERROR', + } as ApiErrorResponse<null>), + ).toEqual({ + kind: 'cannot-connect', temporary: true, }) }) -test("handles network errors", () => { - expect(getGeneralApiProblem({ problem: "NETWORK_ERROR" } as ApiErrorResponse<null>)).toEqual({ - kind: "cannot-connect", +test('handles network errors', () => { + expect( + getGeneralApiProblem({ + problem: 'NETWORK_ERROR', + } as ApiErrorResponse<null>), + ).toEqual({ + kind: 'cannot-connect', temporary: true, }) }) -test("handles timeouts", () => { - expect(getGeneralApiProblem({ problem: "TIMEOUT_ERROR" } as ApiErrorResponse<null>)).toEqual({ - kind: "timeout", +test('handles timeouts', () => { + expect( + getGeneralApiProblem({ + problem: 'TIMEOUT_ERROR', + } as ApiErrorResponse<null>), + ).toEqual({ + kind: 'timeout', temporary: true, }) }) -test("handles server errors", () => { - expect(getGeneralApiProblem({ problem: "SERVER_ERROR" } as ApiErrorResponse<null>)).toEqual({ - kind: "server", +test('handles server errors', () => { + expect( + getGeneralApiProblem({ problem: 'SERVER_ERROR' } as ApiErrorResponse<null>), + ).toEqual({ + kind: 'server', }) }) -test("handles unknown errors", () => { - expect(getGeneralApiProblem({ problem: "UNKNOWN_ERROR" } as ApiErrorResponse<null>)).toEqual({ - kind: "unknown", +test('handles unknown errors', () => { + expect( + getGeneralApiProblem({ + problem: 'UNKNOWN_ERROR', + } as ApiErrorResponse<null>), + ).toEqual({ + kind: 'unknown', temporary: true, }) }) -test("handles unauthorized errors", () => { +test('handles unauthorized errors', () => { expect( - getGeneralApiProblem({ problem: "CLIENT_ERROR", status: 401 } as ApiErrorResponse<null>), + getGeneralApiProblem({ + problem: 'CLIENT_ERROR', + status: 401, + } as ApiErrorResponse<null>), ).toEqual({ - kind: "unauthorized", + kind: 'unauthorized', }) }) -test("handles forbidden errors", () => { +test('handles forbidden errors', () => { expect( - getGeneralApiProblem({ problem: "CLIENT_ERROR", status: 403 } as ApiErrorResponse<null>), + getGeneralApiProblem({ + problem: 'CLIENT_ERROR', + status: 403, + } as ApiErrorResponse<null>), ).toEqual({ - kind: "forbidden", + kind: 'forbidden', }) }) -test("handles not-found errors", () => { +test('handles not-found errors', () => { expect( - getGeneralApiProblem({ problem: "CLIENT_ERROR", status: 404 } as ApiErrorResponse<null>), + getGeneralApiProblem({ + problem: 'CLIENT_ERROR', + status: 404, + } as ApiErrorResponse<null>), ).toEqual({ - kind: "not-found", + kind: 'not-found', }) }) -test("handles other client errors", () => { +test('handles other client errors', () => { expect( - getGeneralApiProblem({ problem: "CLIENT_ERROR", status: 418 } as ApiErrorResponse<null>), + getGeneralApiProblem({ + problem: 'CLIENT_ERROR', + status: 418, + } as ApiErrorResponse<null>), ).toEqual({ - kind: "rejected", + kind: 'rejected', }) }) -test("handles cancellation errors", () => { - expect(getGeneralApiProblem({ problem: "CANCEL_ERROR" } as ApiErrorResponse<null>)).toBeNull() +test('handles cancellation errors', () => { + expect( + getGeneralApiProblem({ problem: 'CANCEL_ERROR' } as ApiErrorResponse<null>), + ).toBeNull() }) diff --git a/app/services/api/api-problem.ts b/app/services/api/api-problem.ts index 9c2aa49..d5b1445 100644 --- a/app/services/api/api-problem.ts +++ b/app/services/api/api-problem.ts @@ -1,72 +1,74 @@ -import { ApiResponse } from "apisauce" +import { ApiResponse } from 'apisauce' export type GeneralApiProblem = /** * Times up. */ - | { kind: "timeout"; temporary: true } + | { kind: 'timeout'; temporary: true } /** * Cannot connect to the server for some reason. */ - | { kind: "cannot-connect"; temporary: true } + | { kind: 'cannot-connect'; temporary: true } /** * The server experienced a problem. Any 5xx error. */ - | { kind: "server" } + | { kind: 'server' } /** * We're not allowed because we haven't identified ourself. This is 401. */ - | { kind: "unauthorized" } + | { kind: 'unauthorized' } /** * We don't have access to perform that request. This is 403. */ - | { kind: "forbidden" } + | { kind: 'forbidden' } /** * Unable to find that resource. This is a 404. */ - | { kind: "not-found" } + | { kind: 'not-found' } /** * All other 4xx series errors. */ - | { kind: "rejected" } + | { kind: 'rejected' } /** * Something truly unexpected happened. Most likely can try again. This is a catch all. */ - | { kind: "unknown"; temporary: true } + | { kind: 'unknown'; temporary: true } /** * The data we received is not in the expected format. */ - | { kind: "bad-data" } + | { kind: 'bad-data' } /** * Attempts to get a common cause of problems from an api response. * * @param response The api response. */ -export function getGeneralApiProblem(response: ApiResponse<any>): GeneralApiProblem | void { +export function getGeneralApiProblem( + response: ApiResponse<any>, +): GeneralApiProblem | void { switch (response.problem) { - case "CONNECTION_ERROR": - return { kind: "cannot-connect", temporary: true } - case "NETWORK_ERROR": - return { kind: "cannot-connect", temporary: true } - case "TIMEOUT_ERROR": - return { kind: "timeout", temporary: true } - case "SERVER_ERROR": - return { kind: "server" } - case "UNKNOWN_ERROR": - return { kind: "unknown", temporary: true } - case "CLIENT_ERROR": + case 'CONNECTION_ERROR': + return { kind: 'cannot-connect', temporary: true } + case 'NETWORK_ERROR': + return { kind: 'cannot-connect', temporary: true } + case 'TIMEOUT_ERROR': + return { kind: 'timeout', temporary: true } + case 'SERVER_ERROR': + return { kind: 'server' } + case 'UNKNOWN_ERROR': + return { kind: 'unknown', temporary: true } + case 'CLIENT_ERROR': switch (response.status) { case 401: - return { kind: "unauthorized" } + return { kind: 'unauthorized' } case 403: - return { kind: "forbidden" } + return { kind: 'forbidden' } case 404: - return { kind: "not-found" } + return { kind: 'not-found' } default: - return { kind: "rejected" } + return { kind: 'rejected' } } - case "CANCEL_ERROR": + case 'CANCEL_ERROR': return null } diff --git a/app/services/api/api.ts b/app/services/api/api.ts index 15f6815..4093d34 100644 --- a/app/services/api/api.ts +++ b/app/services/api/api.ts @@ -1,7 +1,7 @@ -import { ApisauceInstance, create, ApiResponse } from "apisauce" -import { getGeneralApiProblem } from "./api-problem" -import { ApiConfig, DEFAULT_API_CONFIG } from "./api-config" -import * as Types from "./api.types" +import { ApisauceInstance, create, ApiResponse } from 'apisauce' +import { getGeneralApiProblem } from './api-problem' +import { ApiConfig, DEFAULT_API_CONFIG } from './api-config' +import * as Types from './api.types' /** * Manages all requests to the API. @@ -39,7 +39,7 @@ export class Api { baseURL: this.config.url, timeout: this.config.timeout, headers: { - Accept: "application/json", + Accept: 'application/json', }, }) } @@ -68,9 +68,9 @@ export class Api { try { const rawUsers = response.data const resultUsers: Types.User[] = rawUsers.map(convertUser) - return { kind: "ok", users: resultUsers } + return { kind: 'ok', users: resultUsers } } catch { - return { kind: "bad-data" } + return { kind: 'bad-data' } } } @@ -94,9 +94,9 @@ export class Api { id: response.data.id, name: response.data.name, } - return { kind: "ok", user: resultUser } + return { kind: 'ok', user: resultUser } } catch { - return { kind: "bad-data" } + return { kind: 'bad-data' } } } } diff --git a/app/services/api/api.types.ts b/app/services/api/api.types.ts index dde58c0..5090e74 100644 --- a/app/services/api/api.types.ts +++ b/app/services/api/api.types.ts @@ -1,13 +1,17 @@ -import { GeneralApiProblem } from "./api-problem" -import { Character } from "../../models/character/character" +import { GeneralApiProblem } from './api-problem' +import { Character } from '../../models/character/character' export interface User { id: number name: string } -export type GetUsersResult = { kind: "ok"; users: User[] } | GeneralApiProblem -export type GetUserResult = { kind: "ok"; user: User } | GeneralApiProblem +export type GetUsersResult = { kind: 'ok'; users: User[] } | GeneralApiProblem +export type GetUserResult = { kind: 'ok'; user: User } | GeneralApiProblem -export type GetCharactersResult = { kind: "ok"; characters: Character[] } | GeneralApiProblem -export type GetCharacterResult = { kind: "ok"; character: Character } | GeneralApiProblem +export type GetCharactersResult = + | { kind: 'ok'; characters: Character[] } + | GeneralApiProblem +export type GetCharacterResult = + | { kind: 'ok'; character: Character } + | GeneralApiProblem diff --git a/app/services/api/character-api.ts b/app/services/api/character-api.ts index 7755006..e28ec48 100644 --- a/app/services/api/character-api.ts +++ b/app/services/api/character-api.ts @@ -1,7 +1,7 @@ -import { ApiResponse } from "apisauce" -import { Api } from "./api" -import { GetCharactersResult } from "./api.types" -import { getGeneralApiProblem } from "./api-problem" +import { ApiResponse } from 'apisauce' +import { Api } from './api' +import { GetCharactersResult } from './api.types' +import { getGeneralApiProblem } from './api-problem' const API_PAGE_SIZE = 50 @@ -16,7 +16,7 @@ export class CharacterApi { 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", + 'https://raw.githubusercontent.com/infinitered/ignite/master/data/rick-and-morty.json', { amount: API_PAGE_SIZE }, ) @@ -28,10 +28,10 @@ export class CharacterApi { const characters = response.data.results - return { kind: "ok", characters } + return { kind: 'ok', characters } } catch (e) { __DEV__ && console.tron.log(e.message) - return { kind: "bad-data" } + return { kind: 'bad-data' } } } } diff --git a/app/services/api/index.ts b/app/services/api/index.ts index a12bb55..f133e64 100644 --- a/app/services/api/index.ts +++ b/app/services/api/index.ts @@ -1,2 +1,2 @@ -export * from "./api" -export * from "./api.types" +export * from './api' +export * from './api.types' |