@gameroom/cli
Version:
A command line tool for Gameroom
45 lines (43 loc) • 2 kB
JavaScript
const axios = require('axios'),
cosmetic = require('cosmetic'),
{ tryRepeatedly } = require('../../helpers'),
{ shopify, spinner } = require('../../refs')
module.exports = class Inventory {
constructor(data) {
if (!data) data = {}
this.available = data.available || 0,
this.inventory_item_id = data.inventory_item_id || null
this.location_id = data.location_id || null
this.disconnect_if_necessary = true
// updated_at read only
}
async clean() {
return Object.keys(this).reduce((a, i) => this[i] ? { ...a, [i]: this[i] } : a, {})
}
static async fromUnitAndPriceAndStore(unit, price, store) {
return new Inventory({
available: unit.quantity,
inventory_item_id: price.properties.shopify_inventory_id,
location_id: store.shopify_id
})
}
static async delete({ inventory_item_id, location_id }) {
const result = await tryRepeatedly(() => shopify.delete('/inventory_levels.json', {
params: { inventory_item_id, location_id }
}), (err) => spinner.warn(`error deleting ${cosmetic.green('shopify inventory_level')} ${inventory_item_id} ${err}`))
return result
}
static async get(inventory_item_id) {
const result = await tryRepeatedly(() => shopify.get('/inventory_levels.json', {
params: { inventory_item_ids: inventory_item_id }
}), (err) => spinner.warn(`error getting ${cosmetic.green('shopify inventory_levels')} for ${inventory_item_id} ${err}`))
return result && result.data && result.data.inventory_levels ? result.data.inventory_levels.reduce((a, i) => [...a, new Inventory(i)], []) : []
}
async delete() {
return Inventory.delete(this)
}
async save() {
const result = await tryRepeatedly(() => shopify.post('/inventory_levels/set.json', this), (err) => spinner.warn(`error saving ${cosmetic.green('shopify inventory_level')} for ${this.inventory_item_id} ${err}`))
return result && result.data && result.data.inventory_level ? result.data.inventory_level : null
}
}