| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- const fs = require('fs')
- const config = require('./config')
- const random = require('./random')
- const classes = require('./classes')
- const mock = require('./mock')
-
- let batchCount = 1 // Counter to track how many things we've generated
- let extraProfilesToGenerate = 1
- let extraProfileCount = 0 // Counter to track how many EXTRA profiles we've generated
- let generatedResponseCount = 0 // Counter to track every response generated
-
- // Values for responsess as strings
- const possibleResponses = {
- not_important: null,
- some_what_important: null,
- important: null,
- very_important: null,
- extremely_important: null,
- mandatory: null,
- }
- for (let i = 0; i < Object.keys(possibleResponses).length; i++) {
- const key = Object.keys(possibleResponses)[i]
- possibleResponses[key] = config.scoreVals[i].toString()
- }
-
- /**
- * Our initial file setup
- */
- const write = async (batchNum, outputDataObject) => {
- const filename = `_batch_${batchNum}.js`
- await fs.writeFile(`${config.mockOutputPath}/${filename}`, '', () => {})
- fs.appendFile(
- `${config.mockOutputPath}/${filename}`,
- config.header +
- 'module.exports = ' +
- JSON.stringify(outputDataObject, null, ' '),
- err => {
- if (err) {
- console.error(err)
- return
- }
- },
- )
- }
-
- // Helper functions
- const generate = (classObj, amount, meta) => {
- const instances = []
- for (let i = 0; i < amount; i++) {
- let startFrom = meta?.starting ? meta.starting - config.batchSize : 0
- instances.push(new classObj(i + startFrom + 1, meta))
- }
- return instances
- }
-
- console.log('\nStarting...\n---')
-
- /**
- * Generate Users
- */
- const generateUsers = () => {
- let users = generate(classes.User, config.batchSize, {
- starting: config.batchSize * batchCount,
- })
- users.forEach(user => {
- user.is_poster = random.number(100) > config.percentageOfSeekers ? 1 : 0
- if (user.is_poster) {
- extraProfilesToGenerate = extraProfilesToGenerate + random.number(2)
- }
- user.user_name = random.name() + ' ' + random.name()
- user.user_email = random.email()
- })
- console.log('COMPLETED: Generated Users...')
- return users
- }
-
- /**
- * Generate Profiles
- */
- const generateProfiles = jobPosterIds => {
- let profiles = generate(classes.Profile, config.batchSize, {
- starting: config.batchSize * batchCount,
- profile_id: extraProfileCount,
- })
-
- // Generate extra job posting profiles
- // attributed to random user.is_poster === true
- // TODO: Clean this up. Hard to read...
- if (extraProfilesToGenerate > 0) {
- let extras = []
- for (let l = 0; l < extraProfilesToGenerate; l++) {
- const generatedExtraProfiles = generate(classes.Profile, 1, {
- user_id:
- jobPosterIds.length > 1
- ? random.valFrom(jobPosterIds)
- : jobPosterIds[0],
- profile_id:
- config.batchSize * batchCount + extraProfileCount + l,
- })
- extras = [...extras, ...generatedExtraProfiles]
- }
- extras.forEach(profile => {
- profiles.push(profile)
- extraProfileCount++
- })
- }
- console.log('COMPLETED: Generated Profiles...')
- return profiles
- }
-
- /**
- * Generate Responses
- */
- const generateResponses = profiles => {
- // Generate responses first, before filling in details
- let responses = generate(
- classes.Response,
- (config.batchSize + extraProfilesToGenerate) *
- mock.response_keys.length,
- { starting: generatedResponseCount + config.batchSize },
- )
- profiles.forEach((profile, i) => {
- const startingIndex = i * mock.response_keys.length
- for (let k = 0; k < mock.response_keys.length; k++) {
- const resToEdit = responses[startingIndex + k]
- resToEdit.response_key_id = k + 1
- resToEdit.profile_id = profile.profile_id
-
- if (resToEdit.response_key_id < config.zipcodeKey) {
- resToEdit.val = random.valFrom(Object.values(possibleResponses))
- } else if (resToEdit.response_key_id == config.zipcodeKey) {
- resToEdit.val = random.valFrom(config.possibleZipcodes)
- } else {
- switch (resToEdit.response_key_id) {
- case config.mediaKey:
- resToEdit.val = random.media()
- break
- case config.langKey:
- resToEdit.val = random.language()
- break
- case 10:
- resToEdit.val = random.duration()
- break
- case 11:
- resToEdit.val = random.location()
- break
- case config.blurbKey:
- resToEdit.val = random.blurb()
- break
- }
- }
- }
- })
- generatedResponseCount = generatedResponseCount + responses.length
- console.log('COMPLETED: Generated Responses...')
- return responses
- }
-
- /**
- * Our main generator loop
- */
- for (
- let batch = config.batchSize;
- batch <= config.total;
- batch += config.batchSize
- ) {
- const users = generateUsers()
-
- let jobPosterIds = users
- .filter(user => user.is_poster > 0)
- .map(user => user.user_id)
- // Guarantee ONE job poster
- if (!jobPosterIds.length) {
- random.valFrom(users).is_poster = 1
- jobPosterIds = users
- .filter(user => user.is_poster > 0)
- .map(user => user.user_id)
- }
-
- const profiles = generateProfiles(jobPosterIds)
- const responses = generateResponses(profiles)
-
- write(config.batchSize * batchCount, { users, profiles, responses })
- batchCount++
- }
-
- console.log('---\nFINISHED...\n===\n')
|