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 this.url = url
} }
public async get(): Promise<T> { public async get(): Promise<T | undefined> {
const now = new Date() const now = new Date()
if ( if (
this.fetched && this.fetched &&
@ -34,22 +34,17 @@ export class Request<T = any> {
} }
// Fetch Response // Fetch Response
try { const resp = await fetch(this.url, {
const resp = await fetch(this.url, { headers: {
headers: { "Content-Type": "text/plain"
"Content-Type": "text/plain"
}
})
if (resp.status !== 200) {
throw new Error(`Error request ended with the code (${resp.status})`)
} }
const response = await resp.json() })
this.response = response if (resp.status !== 200) {
this.fetched = now return undefined
return response
} catch (e) {
console.error(e)
throw new Error('An error occured')
} }
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() return this.getBaseUrl()
} }
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>; public async getCard(id: string): Promise<CardSingle | undefined>
public async getCard(id: string|number, set?: string): Promise<CardSingle> { public async getCard(id: string|number, set?: string): Promise<CardSingle | undefined> {
const txt = set ? `sets/${set}` : "cards" const txt = set ? `sets/${set}` : "cards"
const req = this.rwgr<CardSingle>(`${this.gbu()}/${txt}/${id}/`) const req = this.rwgr<CardSingle>(`${this.gbu()}/${txt}/${id}/`)
return req.get() return req.get()
} }
public async getCards(set?: string): Promise<Array<CardSimple>> { public async getCards(set?: string): Promise<Array<CardSimple> | undefined> {
if (set) { if (set) {
const setSingle = await this.getSet(set) const setSingle = await this.getSet(set)
if (!setSingle) {
return undefined
}
return setSingle.list 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") 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 req = this.rwgr<CardList>(`${this.gbu()}/cards/`)
const resp = await req.get() const resp = await req.get()
if (!resp) {
return undefined
}
return resp.list return resp.list
} }
public async getSet(set: string, transformDate: false): Promise<SetSingleRaw> public async getSet(set: string, transformDate: false): Promise<SetSingleRaw | undefined>
public async getSet(set: string, transformDate?: true): Promise<SetSingle> public async getSet(set: string, transformDate?: true): Promise<SetSingle | undefined>
public async getSet(set: string, transformDate?: boolean): Promise<SetSingle | SetSingleRaw> { public async getSet(set: string, transformDate?: boolean): Promise<SetSingle | SetSingleRaw | undefined> {
const req = this.rwgr<SetSingle>(`${this.gbu()}/sets/${set}/`) const req = this.rwgr<SetSingle>(`${this.gbu()}/sets/${set}/`)
const resp = await req.get() const resp = await req.get()
if (!resp) {
return undefined
}
if (!transformDate) { if (!transformDate) {
return resp as SetSingleRaw return resp as SetSingleRaw
} }
return Object.assign(resp, {releaseDate: new Date(resp.releaseDate)}) as SetSingle 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}/`) const req = this.rwgr<ExpansionSingle>(`${this.gbu()}/expansions/${expansion}/`)
return req.get() return req.get()
} }
public async getExpansions(): Promise<ExpansionList> { public async getExpansions(): Promise<ExpansionList | undefined> {
const req = this.rwgr<ExpansionList>(`${this.gbu()}/expansions/`) const req = this.rwgr<ExpansionList>(`${this.gbu()}/expansions/`)
return req.get() return req.get()
} }
public async getSets(expansion?: string): Promise<Array<SetSimple>> { public async getSets(expansion?: string): Promise<Array<SetSimple> | undefined> {
if (expansion) { if (expansion) {
const expansionSingle = await this.getExpansion(expansion) const expansionSingle = await this.getExpansion(expansion)
if (!expansionSingle) {
return undefined
}
return expansionSingle.sets return expansionSingle.sets
} }
const req = this.rwgr<SetList>(`${this.gbu()}/sets/`) const req = this.rwgr<SetList>(`${this.gbu()}/sets/`)
const list = await req.get() const list = await req.get()
if (!list) {
return undefined
}
return list.list return list.list
} }