Files
coins/bin/get-type.ts
T

52 lines
1.3 KiB
TypeScript

import { NumistaType } from "@/types/numista";
import { asyncSpawn } from "./async-spawn";
import { fetchTextures } from "./fetch-textures";
import { db } from "./db";
import { handleInsertType, handleUpdateTypeCount } from "./insert";
import { readFile, rm } from "fs/promises";
// eslint-disable-next-line prefer-const
let [id, count] = process.argv.slice(2, 4).map((value) => Number(value));
if (!id) {
throw new Error("Invalid id " + id);
}
if (!count) {
count = 1;
}
const query = db.query("SELECT * FROM NumistaType WHERE id = " + id + ";");
let type = query.get() as NumistaType | null;
if (type) {
console.log(type.title);
type.count = (type.count ?? 1) + count;
handleUpdateTypeCount(type);
} else {
await asyncSpawn("sh", [
"-c",
`curl https://api.numista.com/api/v3/types/${id} -H Numista-API-Key:egr10utzWmYztFrZhJSRGF7Tv64RA3b2S4xdz4di | jq '.count='${count} > tmp-${id}.json`,
]);
type = JSON.parse(await readFile(`tmp-${id}.json`, { encoding: "utf-8" }));
if (!type) {
throw new Error("Invalid response for id " + id);
}
console.log(type.title);
await rm(`tmp-${id}.json`);
type = await fetchTextures(type);
if (!type) {
throw new Error("Error processing textures for id " + id);
}
handleInsertType(type);
}
db.close();