Skip to content

Instantly share code, notes, and snippets.

@on2air
Last active April 23, 2020 03:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save on2air/64947b9f64be115b4b48ea1b4ea8cdb2 to your computer and use it in GitHub Desktop.
Save on2air/64947b9f64be115b4b48ea1b4ea8cdb2 to your computer and use it in GitHub Desktop.
const _ = require('lodash')
const Bottleneck = require('bottleneck')
const Airtable = require('airtable')
const settings = require('./settings')
////////////////Airtable Settings///////////
let atLimiter = new Bottleneck({minTime: 1000/5,maxConcurrent:1})
atLimiter.on("error", function (error) {
/* handle errors here */
console.log('at limiter error',error)
});
let apiKey = settings.airtable.key
let base = settings.airtable.base
let tableIdFoods = settings.airtable.tables.foods
let tableIdCalendar = settings.airtable.tables.calendar
let tableIdResults = settings.airtable.tables.results
let at = new Airtable({apiKey})
let airBase = at.base(base)
let tableFoods = airBase.table(tableIdFoods)
let tableCalendar = airBase.table(tableIdCalendar)
let tableResults = airBase.table(tableIdResults)
function getDaysSides( sides, calendar ){
let daySides = []
for(let s = 0 ; s < sides.length; s++) {
let side = sides[s]
if (_.includes(side.get( "Sides" ), calendar.get("Record ID")) ){
daySides.push(side)
}
}
return daySides
}
/**
* Main Function that creates fake data
* @returns {Promise<void>}
*/
async function main ( ) {
let sides = await tableFoods.select({view:'Sides'}).firstPage()
let dates = await tableCalendar.select({}).firstPage()
let mealSelections = [ "Main Meal", "Daily Special", "Weekly Special"]
let grades = [ "Kindergarten", "1st", "2nd", "3rd", "4th", "5th", "6th" ]
let eatens = [ "None", "Half", "All" ]
let reasons = [ "Didn't like it", "Play Outside", "Already Full" ]
for(let d = 0 ; d < dates.length; d++) {
let date = dates[d]
console.log("Setting for Date: ", date.get('Name'))
let dateSides = getDaysSides(sides,date)
for (let x = 0; x < 100; x++) {
let sidesNotEaten = _.sampleSize(dateSides, _.random(0, dateSides.length) )
let mealEaten = _.sample(eatens)
let data = {
"Calendar": [
date.get("Record ID")
],
"Meal Selected": _.sample(mealSelections),
"Sides Not Eaten": _.flatMap(sidesNotEaten, val => val.id ),
"Main Meal % Eaten": mealEaten,
"Main Meal Reason": mealEaten === "All" ? null : _.sample(reasons),
"Sides Reason": sidesNotEaten.length ? _.sample(reasons) : null,
"Grade": _.sample(grades),
"Mode": "Fake"
}
await tableResults.create(data, {typecast: true})
console.log("Results added", data)
}
}
}
(async () => {
try {
let response = await main();
console.log('response',response);
} catch (e) {
// Deal with the fact the chain failed
console.log(e)
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment