@gameroom/cli
Version:
A command line tool for Gameroom
50 lines (45 loc) • 1.9 kB
JavaScript
const cosmetic = require('cosmetic'),
{ calculateGamePrices, difference, dollarString, grGreen, readCSVFile, timeout, writeCSVFile } = require('../../helpers'),
{ Price_Charting } = require('../../models'),
{ spinner } = require('../../refs'),
{ models: { Price, Product } } = require('@gameroom/kit'),
PRICE_CHARTING = cosmetic.cyan('price charting'),
TRUE = 'true',
FALSE = 'false'
module.exports = async ({ path }) => {
if (!process.env.PRICE_CHARTING_TOKEN) throw new Error('missing price charting env keys')
spinner.info(`importing ${PRICE_CHARTING} ratio csv @ ${new Date().toLocaleString()}`)
spinner.text = `parsing ${path}`
const lines = await readCSVFile(path)
spinner.info(`parsed ${lines.length} lines`)
let products_updated = 0
for (const [i, p] of lines.entries()) {
spinner.text = `checking ${grGreen('product')} group ${i}/${lines.length}`
// check for ratio and difference
if (p.ratio === '0' || p.current_ratio === p.ratio) continue
const ids = p.product_ids.split(', ')
for (const id of ids) {
// get product
let product
try {
product = await Product.find(id)
} catch(err) {
spinner.warn(`error finding ${grGreen('product')} ${id}: ${err}`)
continue
}
// update product
const { properties } = product
properties.price_game_plus_ratio = parseFloat(p.ratio).toFixed(2)
try {
await Product.update({ id, properties })
products_updated++
spinner.succeed(`updated ${grGreen('product')} ${id} ratio ${p.ratio}`)
} catch(err) {
spinner.warn(`error updating ${grGreen('product')} ${id}: ${err}`)
}
}
}
spinner.info(`total: ${lines.length}`)
spinner.succeed(`products updated: ${products_updated}`)
spinner.succeed(`completed ${PRICE_CHARTING} ratio import @ ${new Date().toLocaleString()}`).stop()
}