Let the enduser handle not found errors

Signed-off-by: Avior <florian.bouillon@delta-wings.net>
This commit is contained in:
Florian Bouillon 2021-01-08 15:20:19 +01:00
parent b180369514
commit c4fff9b370
Signed by: Florian Bouillon
GPG Key ID: 50BD648F12C86AB6
2 changed files with 36 additions and 26 deletions

View File

@ -23,7 +23,7 @@ export class Request<T = any> {
this.url = url
}
public async get(): Promise<T> {
public async get(): Promise<T | undefined> {
const now = new Date()
if (
this.fetched &&
@ -34,22 +34,17 @@ export class Request<T = any> {
}
// Fetch Response
try {
const resp = await fetch(this.url, {
headers: {
"Content-Type": "text/plain"
}
})
if (resp.status !== 200) {
throw new Error(`Error request ended with the code (${resp.status})`)
const resp = await fetch(this.url, {
headers: {
"Content-Type": "text/plain"
}
const response = await resp.json()
this.response = response
this.fetched = now
return response
} catch (e) {
console.error(e)
throw new Error('An error occured')
})
if (resp.status !== 200) {
return undefined
}
const response = await resp.json()
this.response = response
this.fetched = now
return response
}
}

View File

@ -25,53 +25,68 @@ export default class TCGdex {
return this.getBaseUrl()
}
public async getCard(id: string|number, set: string): Promise<CardSingle>;
public async getCard(id: string): Promise<CardSingle>;
public async getCard(id: string|number, set?: string): Promise<CardSingle> {
public async getCard(id: string|number, set: string): Promise<CardSingle | undefined>
public async getCard(id: string): Promise<CardSingle | undefined>
public async getCard(id: string|number, set?: string): Promise<CardSingle | undefined> {
const txt = set ? `sets/${set}` : "cards"
const req = this.rwgr<CardSingle>(`${this.gbu()}/${txt}/${id}/`)
return req.get()
}
public async getCards(set?: string): Promise<Array<CardSimple>> {
public async getCards(set?: string): Promise<Array<CardSimple> | undefined> {
if (set) {
const setSingle = await this.getSet(set)
if (!setSingle) {
return undefined
}
return setSingle.list
}
console.warn("note: while it's possible to fetch every cards at once it's not recommended as it take much more time than any other requests")
const req = this.rwgr<CardList>(`${this.gbu()}/cards/`)
const resp = await req.get()
if (!resp) {
return undefined
}
return resp.list
}
public async getSet(set: string, transformDate: false): Promise<SetSingleRaw>
public async getSet(set: string, transformDate?: true): Promise<SetSingle>
public async getSet(set: string, transformDate?: boolean): Promise<SetSingle | SetSingleRaw> {
public async getSet(set: string, transformDate: false): Promise<SetSingleRaw | undefined>
public async getSet(set: string, transformDate?: true): Promise<SetSingle | undefined>
public async getSet(set: string, transformDate?: boolean): Promise<SetSingle | SetSingleRaw | undefined> {
const req = this.rwgr<SetSingle>(`${this.gbu()}/sets/${set}/`)
const resp = await req.get()
if (!resp) {
return undefined
}
if (!transformDate) {
return resp as SetSingleRaw
}
return Object.assign(resp, {releaseDate: new Date(resp.releaseDate)}) as SetSingle
}
public async getExpansion(expansion: string): Promise<ExpansionSingle> {
public async getExpansion(expansion: string): Promise<ExpansionSingle | undefined> {
const req = this.rwgr<ExpansionSingle>(`${this.gbu()}/expansions/${expansion}/`)
return req.get()
}
public async getExpansions(): Promise<ExpansionList> {
public async getExpansions(): Promise<ExpansionList | undefined> {
const req = this.rwgr<ExpansionList>(`${this.gbu()}/expansions/`)
return req.get()
}
public async getSets(expansion?: string): Promise<Array<SetSimple>> {
public async getSets(expansion?: string): Promise<Array<SetSimple> | undefined> {
if (expansion) {
const expansionSingle = await this.getExpansion(expansion)
if (!expansionSingle) {
return undefined
}
return expansionSingle.sets
}
const req = this.rwgr<SetList>(`${this.gbu()}/sets/`)
const list = await req.get()
if (!list) {
return undefined
}
return list.list
}