Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

index.js 5.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. const fs = require('fs')
  2. const config = require('./config')
  3. const random = require('./random')
  4. const classes = require('./classes')
  5. const mock = require('./mock')
  6. let batchCount = 1 // Counter to track how many things we've generated
  7. let extraProfilesToGenerate = 1
  8. let extraProfileCount = 0 // Counter to track how many EXTRA profiles we've generated
  9. let generatedResponseCount = 0 // Counter to track every response generated
  10. // Values for responsess as strings
  11. const possibleResponses = {
  12. not_important: null,
  13. some_what_important: null,
  14. important: null,
  15. very_important: null,
  16. extremely_important: null,
  17. mandatory: null,
  18. }
  19. for (let i = 0; i < Object.keys(possibleResponses).length; i++) {
  20. const key = Object.keys(possibleResponses)[i]
  21. possibleResponses[key] = config.scoreVals[i].toString()
  22. }
  23. /**
  24. * Our initial file setup
  25. */
  26. const write = async (batchNum, outputDataObject) => {
  27. const filename = `_batch_${batchNum}.js`
  28. await fs.writeFile(`${config.mockOutputPath}/${filename}`, '', () => {})
  29. fs.appendFile(
  30. `${config.mockOutputPath}/${filename}`,
  31. config.header +
  32. 'module.exports = ' +
  33. JSON.stringify(outputDataObject, null, ' '),
  34. err => {
  35. if (err) {
  36. console.error(err)
  37. return
  38. }
  39. },
  40. )
  41. }
  42. // Helper functions
  43. const generate = (classObj, amount, meta) => {
  44. const instances = []
  45. for (let i = 0; i < amount; i++) {
  46. let startFrom = meta?.starting ? meta.starting - config.batchSize : 0
  47. instances.push(new classObj(i + startFrom + 1, meta))
  48. }
  49. return instances
  50. }
  51. console.log('\nStarting...\n---')
  52. /**
  53. * Generate Users
  54. */
  55. const generateUsers = () => {
  56. let users = generate(classes.User, config.batchSize, {
  57. starting: config.batchSize * batchCount,
  58. })
  59. users.forEach(user => {
  60. user.is_poster = random.number(100) > config.percentageOfSeekers ? 1 : 0
  61. if (user.is_poster) {
  62. extraProfilesToGenerate = extraProfilesToGenerate + random.number(2)
  63. }
  64. user.user_name = random.name() + ' ' + random.name()
  65. user.user_email = random.email()
  66. })
  67. console.log('COMPLETED: Generated Users...')
  68. return users
  69. }
  70. /**
  71. * Generate Profiles
  72. */
  73. const generateProfiles = jobPosterIds => {
  74. let profiles = generate(classes.Profile, config.batchSize, {
  75. starting: config.batchSize * batchCount,
  76. profile_id: extraProfileCount,
  77. })
  78. // Generate extra job posting profiles
  79. // attributed to random user.is_poster === true
  80. // TODO: Clean this up. Hard to read...
  81. if (extraProfilesToGenerate > 0) {
  82. let extras = []
  83. for (let l = 0; l < extraProfilesToGenerate; l++) {
  84. const generatedExtraProfiles = generate(classes.Profile, 1, {
  85. user_id:
  86. jobPosterIds.length > 1
  87. ? random.valFrom(jobPosterIds)
  88. : jobPosterIds[0],
  89. profile_id:
  90. config.batchSize * batchCount + extraProfileCount + l,
  91. })
  92. extras = [...extras, ...generatedExtraProfiles]
  93. }
  94. extras.forEach(profile => {
  95. profiles.push(profile)
  96. extraProfileCount++
  97. })
  98. }
  99. console.log('COMPLETED: Generated Profiles...')
  100. return profiles
  101. }
  102. /**
  103. * Generate Responses
  104. */
  105. const generateResponses = profiles => {
  106. // Generate responses first, before filling in details
  107. let responses = generate(
  108. classes.Response,
  109. (config.batchSize + extraProfilesToGenerate) * mock.response_keys.length,
  110. { starting: generatedResponseCount + config.batchSize },
  111. )
  112. profiles.forEach((profile, i) => {
  113. const startingIndex = i * mock.response_keys.length
  114. for (let k = 0; k < mock.response_keys.length; k++) {
  115. const resToEdit = responses[startingIndex + k]
  116. resToEdit.response_key_id = k + 1
  117. resToEdit.profile_id = profile.profile_id
  118. if(resToEdit.response_key_id < config.zipcodeKey) {
  119. resToEdit.val = random.valFrom(Object.values(possibleResponses))
  120. }
  121. else if(resToEdit.response_key_id == config.zipcodeKey) {
  122. resToEdit.val = random.valFrom(config.possibleZipcodes)
  123. }
  124. else {
  125. switch (resToEdit.response_key_id) {
  126. case config.mediaKey:
  127. resToEdit.val = random.media()
  128. break
  129. case config.langKey:
  130. resToEdit.val = random.language()
  131. break
  132. case 10:
  133. resToEdit.val = random.duration()
  134. break
  135. case 11:
  136. resToEdit.val = random.location()
  137. break
  138. case config.blurbKey:
  139. resToEdit.val = random.blurb()
  140. break
  141. }
  142. }
  143. }
  144. })
  145. generatedResponseCount = generatedResponseCount + responses.length
  146. console.log('COMPLETED: Generated Responses...')
  147. return responses
  148. }
  149. /**
  150. * Our main generator loop
  151. */
  152. for (
  153. let batch = config.batchSize;
  154. batch <= config.total;
  155. batch += config.batchSize
  156. ) {
  157. const users = generateUsers()
  158. let jobPosterIds = users
  159. .filter(user => user.is_poster > 0)
  160. .map(user => user.user_id)
  161. // Guarentee ONE job poster
  162. if (!jobPosterIds.length) {
  163. random.valFrom(users).is_poster = 1
  164. jobPosterIds = users
  165. .filter(user => user.is_poster > 0)
  166. .map(user => user.user_id)
  167. }
  168. const profiles = generateProfiles(jobPosterIds)
  169. const responses = generateResponses(profiles)
  170. write(config.batchSize * batchCount, { users, profiles, responses })
  171. batchCount++
  172. }
  173. console.log('---\nFINISHED...\n===\n')