@gameroom/cli
Version:
A command line tool for Gameroom
191 lines (182 loc) • 5.63 kB
JavaScript
const nearestDime = require('./nearestDime')
module.exports = (product) => {
const baseline = parseInt(product.properties.price_baseline || 0)
if (!baseline) return { game_plus_amount: 0, game_only_amount: 0, buy_in_game_plus_amount: 0, buy_in_game_only_amount: 0 }
// get ratios
const game_plus_ratio = Math.abs(parseFloat(product.properties.price_game_plus_ratio))
const game_only_ratio = Math.abs(parseFloat(product.properties.price_game_only_ratio))
const buy_in_game_plus_ratio = Math.abs(parseFloat(product.properties.price_buy_in_game_plus_ratio))
const buy_in_game_only_ratio = Math.abs(parseFloat(product.properties.price_buy_in_game_only_ratio))
const { tags } = product
// other prices/operations depend on game_plus_amount value, so calculate it first
let game_plus_amount = nearestDime(baseline * game_plus_ratio)
let floor, sub_floor, multiplier
// PS5 + Xbox Series X
if (tags.includes('PS5') || tags.includes('Xbox Series X')) {
floor = baseline ? 100 : 0
sub_floor = baseline ? floor * 0.60 : 0
multiplier = game_plus_amount
}
// PS4 + Xbox One
else if (tags.includes('PS4') || tags.includes('Xbox One')) {
// skip if gamestop price is 0
floor = baseline ? 100 : 0
sub_floor = baseline ? floor * 0.60 : 0
multiplier = game_plus_amount
}
// Switch
else if (tags.includes('Switch')) {
// skip if gamestop price is 0
floor = baseline ? 500 : 0
sub_floor = baseline ? floor * 0.90 : 0
multiplier = game_plus_amount
}
// PS3
else if (tags.includes('PS3')) {
floor = 100
sub_floor = floor * 0.60
multiplier = game_plus_amount
}
// Xbox 360
else if (tags.includes('Xbox 360')) {
floor = 100
sub_floor = floor * 0.60
multiplier = game_plus_amount
}
// Wii
else if (tags.includes('Wii')) {
floor = 100
sub_floor = floor * 0.60
multiplier = game_plus_amount
}
// Wii U
else if (tags.includes('Wii U')) {
price_floor = 100
sub_floor = floor * 0.60
multiplier = game_plus_amount
}
// PS2 + Xbox
else if (tags.includes('PS2') || tags.includes('Xbox')) {
floor = 100
sub_floor = floor * 0.60
multiplier = game_plus_amount
}
// Gamecube
else if (tags.includes('Gamecube')) {
floor = 100
sub_floor = floor * 0.60
multiplier = game_plus_amount
}
// PS1
else if (tags.includes('PS1')) {
floor = 100
sub_floor = floor * 0.60
multiplier = game_plus_amount
}
// Dreamcast
else if (tags.includes('Dreamcast')) {
floor = 100
sub_floor = floor * 0.60
multiplier = game_plus_amount
}
// Saturn
else if (tags.includes('Saturn')) {
floor = 100
sub_floor = floor * 0.60
multiplier = game_plus_amount
}
// Sega CD
else if (tags.includes('Sega CD')) {
floor = 100
sub_floor = floor * 0.60
multiplier = game_plus_amount
}
// CDi + 3DO
else if (tags.includes('CD-i') || tags.includes('3DO')) {
floor = 100
sub_floor = floor * 0.60
multiplier = game_plus_amount
}
// NES + SNES
else if (tags.includes('NES') || tags.includes('SNES')) {
floor = 100
sub_floor = floor * 0.60
multiplier = baseline
}
// N64
else if (tags.includes('N64')) {
floor = 100
sub_floor = floor * 0.60
multiplier = baseline
}
// Genesis + 32X + Master System
else if (tags.includes('Genesis') || tags.includes('Master System')) {
floor = 100
sub_floor = floor * 0.60
multiplier = baseline
}
// 32X (disc-based)
else if (tags.includes('32X') && tags.includes('Sega CD')) {
floor = 100
sub_floor = floor * 0.60
multiplier = game_plus_amount
}
// 32X (cartridge-based)
else if (tags.includes('32X') && !tags.includes('Sega CD')) {
floor = 100
sub_floor = floor * 0.60
multiplier = baseline
}
// Atari + Vision(s)
else if (tags.includes('Atari') || tags.includes('Intellivision') || tags.includes('Colecovision')) {
floor = 100
sub_floor = floor * 0.60
multiplier = baseline
}
// GB + GBC
else if (tags.includes('Gameboy') || tags.includes('Gameboy Color')) {
floor = 100
sub_floor = floor * 0.60
multiplier = baseline
}
// GBA
else if (tags.includes('Gameboy Advance')) {
floor = 100
sub_floor = floor * 0.60
multiplier = baseline
}
// 3DS + DS
else if (tags.includes('3DS') || tags.includes('DS')) {
floor = 100
sub_floor = floor * 0.60
multiplier = game_plus_amount
}
// PSP
else if (tags.includes('PSP')) {
floor = 100
sub_floor = floor * 0.60
multiplier = game_plus_amount
}
// Vita
else if (tags.includes('Vita')) {
floor = 100
sub_floor = floor * 0.60
multiplier = game_plus_amount
}
// Game Gear
else if (tags.includes('Game Gear')) {
floor = 100
sub_floor = floor * 0.60
multiplier = baseline
}
sub_floor = nearestDime(sub_floor)
// continue calculating sell values
if (game_plus_ratio && game_plus_amount < floor) game_plus_amount = floor
if (game_plus_amount > multiplier) multiplier = game_plus_amount //reset the value of 'multiplier' in the case where the game_plus_amount is set to the price floor
let game_only_amount = nearestDime(multiplier * game_only_ratio)
if (game_only_ratio && game_only_amount < sub_floor) game_only_amount = sub_floor
// buy values
const buy_in_game_plus_amount = -nearestDime(game_plus_amount * buy_in_game_plus_ratio)
const buy_in_game_only_amount = -nearestDime(game_only_amount * buy_in_game_only_ratio)
return { game_plus_amount, game_only_amount, buy_in_game_plus_amount, buy_in_game_only_amount }
}