Last active
April 23, 2020 03:36
-
-
Save on2air/64947b9f64be115b4b48ea1b4ea8cdb2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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