[feat] price history
This commit is contained in:
@@ -55,6 +55,15 @@ async function syncPrices() {
|
||||
console.error(chalk.yellow(`Expected ${batchSize} SKUs, got ${skuData.length}`));
|
||||
}
|
||||
|
||||
if (skuData.length === 0) {
|
||||
console.error(chalk.red('0 SKUs, skipping DB updates.'));
|
||||
// remove skus from the 'working' processingSkus table
|
||||
await db.delete(processingSkus).where(inArray(processingSkus.skuId, skuIds));
|
||||
// be nice to the API and not send too many requests in a short time
|
||||
await sleep(200);
|
||||
continue;
|
||||
}
|
||||
|
||||
const skuUpdates = skuData.map((sku: any) => { return {
|
||||
skuId: sku.skuId,
|
||||
cardId: 0,
|
||||
@@ -75,8 +84,26 @@ async function syncPrices() {
|
||||
highestPrice: sql.raw(`excluded.${toSnakeCase(skus.highestPrice.name)}`),
|
||||
lowestPrice: sql.raw(`excluded.${toSnakeCase(skus.lowestPrice.name)}`),
|
||||
marketPrice: sql.raw(`excluded.${toSnakeCase(skus.marketPrice.name)}`),
|
||||
},
|
||||
setWhere: sql`skus.market_price is distinct from excluded.market_price`,
|
||||
}).returning();
|
||||
|
||||
if (skuRows && skuRows.length > 0) {
|
||||
const skuHistory = skuRows.filter(row => row.calculatedAt != null).map(row => { return {
|
||||
skuId: row.skuId,
|
||||
calculatedAt: new Date(row.calculatedAt?.toISOString().slice(0, 10)||0),
|
||||
marketPrice: row.marketPrice,
|
||||
}});
|
||||
if (skuHistory && skuHistory.length > 0) {
|
||||
await db.insert(priceHistory).values(skuHistory).onConflictDoUpdate({
|
||||
target: [priceHistory.skuId,priceHistory.calculatedAt],
|
||||
set: {
|
||||
marketPrice: sql.raw(`excluded.${toSnakeCase(skus.marketPrice.name)}`),
|
||||
}
|
||||
});
|
||||
console.log(chalk.cyan(`${skuRows.length} history rows added.`));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// remove skus from the 'working' processingSkus table
|
||||
await db.delete(processingSkus).where(inArray(processingSkus.skuId, skuIds));
|
||||
|
||||
Reference in New Issue
Block a user