mirror of
https://github.com/tcgdex/cards-database.git
synced 2025-08-16 09:08:52 +00:00
feat: less errors
This commit is contained in:
@@ -28,6 +28,7 @@
|
||||
"@types/express": "^4.17.21",
|
||||
"@types/node": "^20.17.32",
|
||||
"@types/swagger-ui-express": "^4.1.8",
|
||||
"@typescript/native-preview": "^7.0.0-dev.20250805.1",
|
||||
"glob": "^10.4.5",
|
||||
"typescript": "^4.9.5"
|
||||
}
|
||||
|
@@ -53,11 +53,17 @@ export async function getAllCards(lang: SupportedLanguages): Promise<Array<SDKCa
|
||||
}
|
||||
|
||||
async function transformCard(card: MappedCard): Promise<SDKCard> {
|
||||
console.time('cardmarket')
|
||||
const cardmarket = await getCardMarketPrice(card)
|
||||
console.timeEnd('cardmarket')
|
||||
console.time('tcgplayer')
|
||||
const tcgplayer = await getTCGPlayerPrice(card)
|
||||
console.timeEnd('tcgplayer')
|
||||
return {
|
||||
...objectOmit(card, 'thirdParty'),
|
||||
pricing: {
|
||||
cardmarket: await getCardMarketPrice(card),
|
||||
tcgplayer: await getTCGPlayerPrice(card)
|
||||
cardmarket: cardmarket,
|
||||
tcgplayer: tcgplayer
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,7 +1,5 @@
|
||||
import { objectLoop } from '@dzeio/object-util'
|
||||
import type { Serie as SDKSerie, SerieResume, SupportedLanguages } from '@tcgdex/sdk'
|
||||
import { executeQuery, type Query } from '../../libs/QueryEngine/filter'
|
||||
import { findOneSet } from './Set'
|
||||
|
||||
import de from '../../../generated/de/series.json'
|
||||
import en from '../../../generated/en/series.json'
|
||||
@@ -44,55 +42,32 @@ const series = {
|
||||
'zh-cn': zhcn,
|
||||
} as const
|
||||
|
||||
type LocalSerie = Omit<SDKSerie, 'sets'> & {sets: () => Array<TCGSet>}
|
||||
type MappedSerie = any // (typeof en)[number]
|
||||
|
||||
export default class Serie implements LocalSerie {
|
||||
export async function getAllSeries(lang: SupportedLanguages): Promise<Array<SDKSerie>> {
|
||||
return Promise.all((series[lang] as Array<MappedSerie>).map(transformSerie))
|
||||
}
|
||||
|
||||
id!: string
|
||||
name!: string
|
||||
logo?: string | undefined
|
||||
async function transformSerie(serie: MappedSerie): Promise<SDKSerie> {
|
||||
return serie
|
||||
}
|
||||
|
||||
public constructor(
|
||||
private lang: SupportedLanguages,
|
||||
private serie: SDKSerie
|
||||
) {
|
||||
objectLoop(serie, (it, key) => {
|
||||
if (key === 'sets') {
|
||||
return
|
||||
}
|
||||
this[key as 'id'] = it as string
|
||||
})
|
||||
export async function findSeries(lang: SupportedLanguages, query: Query<SDKSerie>) {
|
||||
return executeQuery(await getAllSeries(lang), query).data
|
||||
}
|
||||
|
||||
export async function findOneSerie(lang: SupportedLanguages, query: Query<SDKSerie>) {
|
||||
const res = await findSeries(lang, query)
|
||||
if (res.length === 0) {
|
||||
return undefined
|
||||
}
|
||||
return res[0]
|
||||
}
|
||||
|
||||
public async sets(): Array<TCGSet> {
|
||||
return Promise.all(this.serie.sets.map((s) => findOneSet(this.lang, { id: s.id })))
|
||||
}
|
||||
|
||||
public static getAll(lang: SupportedLanguages): Array<SDKSerie> {
|
||||
return series[lang]
|
||||
}
|
||||
|
||||
public static find(lang: SupportedLanguages, query: Query<SDKSerie>) {
|
||||
return executeQuery(Serie.getAll(lang), query).data.map((it) => new Serie(lang, it))
|
||||
}
|
||||
|
||||
public static findOne(lang: SupportedLanguages, query: Query<SDKSerie>) {
|
||||
const res = Serie.find(lang, query)
|
||||
if (res.length === 0) {
|
||||
return undefined
|
||||
}
|
||||
return res[0]
|
||||
}
|
||||
|
||||
public resume(): SerieResume {
|
||||
return {
|
||||
id: this.id,
|
||||
name: this.name,
|
||||
logo: this.logo
|
||||
}
|
||||
}
|
||||
|
||||
public full(): SDKSerie {
|
||||
return this.serie
|
||||
export function serieToBrief(set: SDKSerie): SerieResume {
|
||||
return {
|
||||
id: set.id,
|
||||
name: set.name,
|
||||
logo: set.logo
|
||||
}
|
||||
}
|
||||
|
@@ -1,8 +1,6 @@
|
||||
import { objectLoop } from '@dzeio/object-util'
|
||||
import type { Set as SDKSet, SetResume, SupportedLanguages } from '@tcgdex/sdk'
|
||||
import { executeQuery, type Query } from '../../libs/QueryEngine/filter'
|
||||
import { findOneCard, type Card } from './Card'
|
||||
import Serie from './Serie'
|
||||
import { objectOmit } from '@dzeio/object-util'
|
||||
|
||||
import de from '../../../generated/de/sets.json'
|
||||
import en from '../../../generated/en/sets.json'
|
||||
@@ -52,7 +50,7 @@ export async function getAllSets(lang: SupportedLanguages): Promise<Array<SDKSet
|
||||
|
||||
async function transformSet(set: MappedSet): Promise<SDKSet> {
|
||||
return {
|
||||
...objectOmit(card, 'thirdParty'),
|
||||
...objectOmit(set, 'thirdParty'),
|
||||
// pricing: {
|
||||
// cardmarket: await getCardMarketPrice(card),
|
||||
// tcgplayer: await getTCGPlayerPrice(card)
|
||||
|
@@ -7,8 +7,8 @@ import type { Query } from '../../libs/QueryEngine/filter'
|
||||
import { recordToQuery } from '../../libs/QueryEngine/parsers'
|
||||
import { betterSorter, checkLanguage, unique } from '../../util'
|
||||
import { getAllCards, findOneCard, findCards, toBrief } from '../Components/Card'
|
||||
import { getAllSets, findOneSet, findSets, setToBrief } from '../Components/Set'
|
||||
import Serie from '../Components/Serie'
|
||||
import { findOneSet, findSets, setToBrief } from '../Components/Set'
|
||||
import { findOneSerie, findSeries, serieToBrief } from '../Components/Serie'
|
||||
|
||||
type CustomRequest = Request & {
|
||||
/**
|
||||
@@ -86,16 +86,16 @@ server
|
||||
// biome-ignore lint/style/noNonNullAssertion: <explanation>
|
||||
const query: Query = req.advQuery!
|
||||
|
||||
let data: Array<SDKCard | any | Serie> = []
|
||||
let data: Array<SDKCard | any> = []
|
||||
switch (what.toLowerCase()) {
|
||||
case 'card':
|
||||
data = await findCards(lang, query)
|
||||
break
|
||||
case 'set':
|
||||
data = findSets(lang, query)
|
||||
data = await findSets(lang, query)
|
||||
break
|
||||
case 'serie':
|
||||
data = Serie.find(lang, query)
|
||||
data = await findSeries(lang, query)
|
||||
break
|
||||
default:
|
||||
sendError(Errors.NOT_FOUND, res, { details: `You can only run random requests on "card", "set" or "serie" while you did on "${what}"` })
|
||||
@@ -153,13 +153,12 @@ server
|
||||
'serie.name': tmp
|
||||
}]
|
||||
}
|
||||
result = await findSets(lang, query).map(setToBrief)
|
||||
result = (await findSets(lang, query)).map(setToBrief)
|
||||
break
|
||||
}
|
||||
case 'series':
|
||||
result = Serie
|
||||
.find(lang, query)
|
||||
.map((c) => c.resume())
|
||||
result = (await findSeries(lang, query))
|
||||
.map(serieToBrief)
|
||||
break
|
||||
case 'categories':
|
||||
case "energy-types":
|
||||
@@ -210,6 +209,7 @@ server
|
||||
* ex: /v2/en/cards/base1-1
|
||||
*/
|
||||
.get('/:lang/:endpoint/:id', async (req: CustomRequest, res) => {
|
||||
console.time('request')
|
||||
let { id, lang, endpoint } = req.params
|
||||
|
||||
if (id.endsWith('.json')) {
|
||||
@@ -232,16 +232,16 @@ server
|
||||
break
|
||||
|
||||
case 'sets':
|
||||
result = await findOneset(lang, { id })
|
||||
result = await findOneSet(lang, { id })
|
||||
if (!result) {
|
||||
result = await findOneset(lang, { name: id })
|
||||
result = await findOneSet(lang, { name: id })
|
||||
}
|
||||
break
|
||||
|
||||
case 'series':
|
||||
result = Serie.findOne(lang, { id })?.full()
|
||||
result = await findOneSerie(lang, { id })
|
||||
if (!result) {
|
||||
result = Serie.findOne(lang, { name: id })?.full()
|
||||
result = await findOneSerie(lang, { name: id })
|
||||
}
|
||||
break
|
||||
case 'dex-ids': {
|
||||
@@ -263,6 +263,8 @@ server
|
||||
.map(toBrief)
|
||||
}
|
||||
}
|
||||
|
||||
console.timeEnd('request')
|
||||
if (!result) {
|
||||
sendError(Errors.NOT_FOUND, res)
|
||||
return
|
||||
|
@@ -3,8 +3,8 @@ import { type Query, Sort } from '../../libs/QueryEngine/filter'
|
||||
import { recordToQuery } from '../../libs/QueryEngine/parsers'
|
||||
import { checkLanguage } from '../../util'
|
||||
import { findCards, findOneCard } from '../Components/Card'
|
||||
import Serie from '../Components/Serie'
|
||||
import Set from '../Components/Set'
|
||||
import { findSets, findOneSet } from '../Components/Set'
|
||||
import { findSeries, findOneSerie } from '../Components/Serie'
|
||||
|
||||
// TODO: make a better way to find the language
|
||||
function getLang(e: any): SupportedLanguages {
|
||||
@@ -62,18 +62,18 @@ export default {
|
||||
|
||||
// Set Endpoints
|
||||
set: middleware((lang, query) => {
|
||||
return Set.findOne(lang, query)
|
||||
return findOneSet(lang, query)
|
||||
}),
|
||||
sets: middleware((lang, query) => {
|
||||
return Set.find(lang, query)
|
||||
return findSets(lang, query)
|
||||
}),
|
||||
|
||||
// Serie Endpoints
|
||||
serie: middleware((lang, query) => {
|
||||
return Serie.findOne(lang, query)
|
||||
return findOneSerie(lang, query)
|
||||
}),
|
||||
series: middleware((lang, query) => {
|
||||
return Serie.find(lang, query)
|
||||
return findSeries(lang, query)
|
||||
}),
|
||||
|
||||
};
|
||||
|
@@ -43,8 +43,14 @@ export async function updateTCGPlayerDatas(): Promise<boolean> {
|
||||
.map((it) => it!.thirdParty!.tcgplayer)
|
||||
|
||||
for (const product of products) {
|
||||
const data = await fetch(`https://tcgcsv.com/tcgplayer/3/${product}/prices`)
|
||||
.then((res) => res.json() as Promise<Root>)
|
||||
const res = await fetch(`https://tcgcsv.com/tcgplayer/3/${product}/prices`)
|
||||
|
||||
if (res.status >= 400) {
|
||||
console.warn(`couldn\'t load TCGplayer datas for ${product} :(` + await res.text())
|
||||
continue
|
||||
}
|
||||
|
||||
const data = await res.json()
|
||||
|
||||
// console.log('data:', data)
|
||||
for (const item of data.results) {
|
||||
|
@@ -1,7 +1,7 @@
|
||||
import { objectKeys, objectLoop, objectMap } from '@dzeio/object-util'
|
||||
import express from 'express'
|
||||
import Serie from './V2/Components/Serie'
|
||||
import Set from './V2/Components/Set'
|
||||
import * as Serie from './V2/Components/Serie'
|
||||
import * as Set from './V2/Components/Set'
|
||||
|
||||
import de from '../generated/de/stats.json'
|
||||
import en from '../generated/en/stats.json'
|
||||
|
Reference in New Issue
Block a user