56 lines
1.5 KiB
TypeScript
56 lines
1.5 KiB
TypeScript
|
import { existsSync } from "fs";
|
||
|
|
||
|
import { Article, MCMDB } from "./types";
|
||
|
import { asyncLoadJSON, asyncSaveJSON, leanArticle, leanCard } from "./utils";
|
||
|
|
||
|
async function run() {
|
||
|
if (process.argv.length < 3) {
|
||
|
console.error("Usage: yarn fetch <uid>");
|
||
|
process.exit(1);
|
||
|
return;
|
||
|
}
|
||
|
const uid = process.argv[2];
|
||
|
const uidCards = `${uid}-cards.json`;
|
||
|
if (!existsSync("mcmCards.json")) {
|
||
|
console.error("Card db is missing! Run 'yarn convert-db' first.");
|
||
|
process.exit(1);
|
||
|
}
|
||
|
if (!existsSync(uidCards)) {
|
||
|
console.error(`Could not find ${uidCards}! Run 'yarn fetch ${uid}' first.`);
|
||
|
process.exit(1);
|
||
|
}
|
||
|
let db = await asyncLoadJSON<MCMDB>("mcmCards.json");
|
||
|
let articles = await asyncLoadJSON<Article[]>(`${uid}-cards.json`);
|
||
|
|
||
|
let cards = articles
|
||
|
.filter(art => art.idProduct in db)
|
||
|
.map(art => {
|
||
|
const card = db[art.idProduct];
|
||
|
return {
|
||
|
...leanArticle(art),
|
||
|
...leanCard(card)
|
||
|
};
|
||
|
});
|
||
|
|
||
|
let valid = cards.filter(
|
||
|
c =>
|
||
|
(c.language == "Italian" || c.language == "English") &&
|
||
|
c.price <= 0.1 &&
|
||
|
(c.rarity == "rare" || c.rarity == "mythic")
|
||
|
);
|
||
|
let netprice = valid.reduce((a, c) => (a += c.price), 0);
|
||
|
console.log(
|
||
|
`Found ${
|
||
|
valid.length
|
||
|
} cards (rare or mythic) <= € 0.10 (IT/EN), price to buy all: € ${netprice.toFixed(
|
||
|
2
|
||
|
)}.`
|
||
|
);
|
||
|
await asyncSaveJSON(
|
||
|
`${uid}-filtered-cards.json`,
|
||
|
valid.sort((a, b) => a.edhrecRank - b.edhrecRank)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
run();
|