mirror of
https://github.com/tcgdex/cards-database.git
synced 2025-07-29 03:09:49 +00:00
feat: Add status Dashboard (#187)
* feat: Add status Dashboard Still need some polishing like using the compiler instead of the live DB Signed-off-by: Avior <github@avior.me> * refactor: Simplified compiler files generators Signed-off-by: Avior <florian.bouillon@delta-wings.net> * chore: Add step to compiler for stats and optimize Signed-off-by: Avior <github@avior.me> * refactor: Remove unused variable Signed-off-by: Avior <github@avior.me>
This commit is contained in:
@ -1,30 +1,10 @@
|
||||
import { Card as CardSingle, CardResume } from '../../../meta/definitions/api'
|
||||
import { Card, Languages } from '../../../interfaces'
|
||||
import { Endpoint } from '../compilerInterfaces'
|
||||
import { cardToCardSimple, cardToCardSingle, getCards } from '../utils/cardUtil'
|
||||
|
||||
type CardList = Array<CardResume>
|
||||
|
||||
export default class implements Endpoint<CardList, CardSingle, Record<string, unknown>, Array<[string, Card]>> {
|
||||
|
||||
public constructor(
|
||||
private lang: keyof Languages
|
||||
) {}
|
||||
|
||||
public async index(common: Array<[string, Card]>): Promise<CardList> {
|
||||
return Promise.all(common.map((c) => cardToCardSimple(c[0], c[1], this.lang)))
|
||||
}
|
||||
|
||||
public async item(common: Array<[string, Card]>): Promise<Record<string, CardSingle>> {
|
||||
const items: Record<string, CardSingle> = {}
|
||||
for await (const card of common) {
|
||||
items[`${card[1].set.id}-${card[0]}`] = await cardToCardSingle(card[0], card[1], this.lang)
|
||||
}
|
||||
return items
|
||||
}
|
||||
|
||||
public async common(): Promise<Array<[string, Card]>> {
|
||||
return getCards(this.lang)
|
||||
}
|
||||
import { SupportedLanguages } from '../../../interfaces'
|
||||
import { FileFunction } from '../compilerInterfaces'
|
||||
import { cardToCardSingle, getCards } from '../utils/cardUtil'
|
||||
|
||||
const fn: FileFunction = async (lang: SupportedLanguages) => {
|
||||
const common = await getCards(lang)
|
||||
return await Promise.all(common.map((card) => cardToCardSingle(card[0], card[1], lang)))
|
||||
}
|
||||
|
||||
export default fn
|
||||
|
@ -1,32 +1,10 @@
|
||||
import { Serie as SerieSingle, SerieResume } from '../../../meta/definitions/api'
|
||||
import { Languages, Serie } from '../../../interfaces'
|
||||
import { Endpoint } from '../compilerInterfaces'
|
||||
import { getSeries, serieToSerieSimple, serieToSerieSingle } from '../utils/serieUtil'
|
||||
|
||||
type SerieList = Array<SerieResume>
|
||||
|
||||
export default class implements Endpoint<SerieList, SerieSingle, Record<string, any>, Array<Serie>> {
|
||||
|
||||
public constructor(
|
||||
private lang: keyof Languages
|
||||
) {}
|
||||
|
||||
public async index(common: Array<Serie>): Promise<Array<SerieResume>> {
|
||||
return Promise.all(common.map((s) => serieToSerieSimple(s, this.lang)))
|
||||
}
|
||||
|
||||
public async item(common: Array<Serie>): Promise<Record<string, SerieSingle>> {
|
||||
const items: Record<string, SerieSingle> = {}
|
||||
for await (const val of common) {
|
||||
const gen = await serieToSerieSingle(val, this.lang)
|
||||
const name = val.name[this.lang] as string
|
||||
items[val.id] = gen
|
||||
}
|
||||
return items
|
||||
}
|
||||
|
||||
public async common(): Promise<Array<Serie>> {
|
||||
return getSeries(this.lang)
|
||||
}
|
||||
import { SupportedLanguages } from '../../../interfaces'
|
||||
import { FileFunction } from '../compilerInterfaces'
|
||||
import { getSeries, serieToSerieSingle } from '../utils/serieUtil'
|
||||
|
||||
const fn: FileFunction = async (lang: SupportedLanguages) => {
|
||||
const common = await getSeries(lang)
|
||||
return await Promise.all(common.map((val) => serieToSerieSingle(val, lang)))
|
||||
}
|
||||
|
||||
export default fn
|
||||
|
@ -1,56 +1,11 @@
|
||||
import { Set as SetSingle, Card as CardSingle, SetResume } from '../../../meta/definitions/api'
|
||||
import { getSets, isSetAvailable, setToSetSimple, setToSetSingle } from '../utils/setUtil'
|
||||
import { Languages, Set } from '../../../interfaces'
|
||||
import { Endpoint } from '../compilerInterfaces'
|
||||
import { cardToCardSingle, getCards } from '../utils/cardUtil'
|
||||
import { getSets, setToSetSingle } from '../utils/setUtil'
|
||||
import { SupportedLanguages } from '../../../interfaces'
|
||||
import { FileFunction } from '../compilerInterfaces'
|
||||
|
||||
type SetList = Array<SetResume>
|
||||
|
||||
export default class implements Endpoint<SetList, SetSingle, CardSingle, Array<Set>> {
|
||||
|
||||
public constructor(
|
||||
private lang: keyof Languages
|
||||
) {}
|
||||
|
||||
public async index(common: Array<Set>): Promise<SetList> {
|
||||
const sets = common
|
||||
.sort((a, b) => a.releaseDate > b.releaseDate ? 1 : -1)
|
||||
|
||||
const tmp: SetList = await Promise.all(sets.map((el) => setToSetSimple(el, this.lang)))
|
||||
|
||||
return tmp
|
||||
}
|
||||
|
||||
public async item(common: Array<Set>): Promise<Record<string, SetSingle>> {
|
||||
const sets = await Promise.all(common
|
||||
.map((set) => setToSetSingle(set, this.lang)))
|
||||
const res: Record<string, SetSingle> = {}
|
||||
|
||||
for (const set of sets) {
|
||||
res[set.id] = set
|
||||
}
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
public async common(): Promise<Array<Set>> {
|
||||
return getSets(undefined, this.lang)
|
||||
}
|
||||
|
||||
public async sub(common: Array<Set>, item: string): Promise<Record<string, CardSingle> | undefined> {
|
||||
const set = common.find((s) => s.name[this.lang] === item || s.id === item)
|
||||
|
||||
if (!set || !isSetAvailable(set, this.lang)) {
|
||||
return undefined
|
||||
}
|
||||
|
||||
const lit = await getCards(this.lang, set)
|
||||
const list: Record<string, CardSingle> = {}
|
||||
for await (const card of lit) {
|
||||
list[card[0]] = await cardToCardSingle(card[0], card[1], this.lang)
|
||||
}
|
||||
|
||||
return list
|
||||
}
|
||||
|
||||
const fn: FileFunction = async (lang: SupportedLanguages) => {
|
||||
const common = await getSets(undefined, lang)
|
||||
return await Promise.all(common.map((set) => setToSetSingle(set, lang)))
|
||||
}
|
||||
|
||||
export default fn
|
||||
|
42
server/compiler/endpoints/stats.ts
Normal file
42
server/compiler/endpoints/stats.ts
Normal file
@ -0,0 +1,42 @@
|
||||
import { getSets, setToSetSingle } from '../utils/setUtil'
|
||||
import { SupportedLanguages } from '../../../interfaces'
|
||||
import { FileFunction } from '../compilerInterfaces'
|
||||
import { getCards } from '../utils/cardUtil'
|
||||
import { getSeries } from '../utils/serieUtil'
|
||||
|
||||
interface Stats {
|
||||
count: number
|
||||
total: number
|
||||
images: number
|
||||
sets: Record<string, Record<string, {name: string, count: number, images: number}>>
|
||||
}
|
||||
|
||||
const fn: FileFunction = async (lang: SupportedLanguages) => {
|
||||
const stats: Partial<Stats> = {}
|
||||
stats.count = (await getCards(lang)).length
|
||||
|
||||
const langSets = await Promise.all(await getSets(undefined, lang).then((sets) => sets.map(async (set) => await setToSetSingle(set, lang))))
|
||||
const englishSets = await Promise.all(await getSets(undefined, 'en').then((sets) => sets.map(async (set) => await setToSetSingle(set, 'en'))))
|
||||
stats.total = langSets.reduce((p, set) => p + (englishSets.find((s) => set.id === s.id)?.cardCount?.total ?? 0), 0)
|
||||
stats.images = langSets.reduce((p1, set) => p1 + (set.cards.reduce((p2, card) => p2 + (card.image ? 1 : 0), 0)), 0)
|
||||
stats.sets = {}
|
||||
|
||||
const series = await getSeries(lang)
|
||||
|
||||
for (const serie of series) {
|
||||
stats.sets[serie.id] = {}
|
||||
for (const set of langSets.filter((set) => set.serie.id === serie.id)) {
|
||||
stats.sets[serie.id][set.id] = {
|
||||
name: set.name,
|
||||
count: set.cards.length,
|
||||
images: set.cards.reduce((p, card) => p + (card.image ? 1 : 0), 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//const sts = await Promise.all(sets.map((set) => getCards(lang, set)))
|
||||
return stats
|
||||
}
|
||||
|
||||
export default fn
|
Reference in New Issue
Block a user