-
Notifications
You must be signed in to change notification settings - Fork 1
/
readPokeDetailByName.ts
43 lines (36 loc) · 1.17 KB
/
readPokeDetailByName.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import { IReqPokeDetailParams } from '@dto/v1/poke-detail/IReqPokeDetail';
import PokeDetailFrame from '@frame/PokeDetailFrame';
import RestError from '@module/http/RestError';
import httpStatusCodes from 'http-status-codes';
import { isError } from 'my-easy-fp';
export default async function readPokeDetailByName(name: IReqPokeDetailParams['name']) {
const code = '44ea7ef11bdb4814af62de4c35d37dc5';
try {
if (name.toLowerCase() === 'guilmon') {
throw new RestError({
code,
status: httpStatusCodes.BAD_REQUEST,
message: 'guilmon is digimon character',
});
}
const frame = new PokeDetailFrame({ name });
const resp = await frame.execute();
if (resp.type === 'fail') {
throw new RestError({
code,
message: 'poke api call error',
status: resp.fail.status,
});
}
return resp.pass;
} catch (catched) {
const err = isError(catched) ?? new Error('unknown error raised from readPokeDetailByName');
const restErr = new RestError({
code,
message: err.message,
status: httpStatusCodes.INTERNAL_SERVER_ERROR,
});
restErr.stack = err.stack;
throw restErr;
}
}