Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

index.js 5.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. const fs = require('fs')
  2. const config = require('./config')
  3. const random = require('./random')
  4. const classes = require('./classes')
  5. const score = require('./score')
  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 preComputedScores = score.precomputed
  44. const generate = (classObj, amount, meta) => {
  45. const instances = []
  46. for (let i = 0; i < amount; i++) {
  47. let startFrom = meta?.starting ? meta.starting - config.batchSize : 0
  48. instances.push(new classObj(i + startFrom + 1, meta))
  49. }
  50. return instances
  51. }
  52. console.log('\nStarting...\n---')
  53. /**
  54. * Generate Users
  55. */
  56. const generateUsers = () => {
  57. let users = generate(classes.User, config.batchSize, {
  58. starting: config.batchSize * batchCount,
  59. })
  60. users.forEach(user => {
  61. user.is_poster = random.number(100) > config.percentageOfSeekers ? 1 : 0
  62. if (user.is_poster) {
  63. extraProfilesToGenerate = extraProfilesToGenerate + random.number(2)
  64. }
  65. user.user_name = random.name() + ' ' + random.name()
  66. user.user_email = random.email()
  67. })
  68. console.log('COMPLETED: Generated Users...')
  69. return users
  70. }
  71. /**
  72. * Generate Profiles
  73. */
  74. const generateProfiles = jobPosterIds => {
  75. let profiles = generate(classes.Profile, config.batchSize, {
  76. starting: config.batchSize * batchCount,
  77. profile_id: extraProfileCount,
  78. })
  79. profiles.forEach(profile => {
  80. profile.user_media = random.media()
  81. })
  82. // Generate extra job posting profiles
  83. // attributed to random user.is_poster === true
  84. // TODO: Clean this up. Hard to read...
  85. if (extraProfilesToGenerate > 0) {
  86. let extras = []
  87. for (let l = 0; l < extraProfilesToGenerate; l++) {
  88. const generatedExtraProfiles = generate(classes.Profile, 1, {
  89. user_id:
  90. jobPosterIds.length > 1
  91. ? random.valFrom(jobPosterIds)
  92. : jobPosterIds[0],
  93. profile_id:
  94. config.batchSize * batchCount + extraProfileCount + l,
  95. })
  96. extras = [...extras, ...generatedExtraProfiles]
  97. }
  98. extras.forEach(profile => {
  99. profile.user_media = random.media()
  100. profiles.push(profile)
  101. extraProfileCount++
  102. })
  103. }
  104. console.log('COMPLETED: Generated Profiles...')
  105. return profiles
  106. }
  107. /**
  108. * Generate Responses
  109. */
  110. const generateResponses = profiles => {
  111. // Generate responses first, before filling in details
  112. let responses = generate(
  113. classes.Response,
  114. (config.batchSize + extraProfilesToGenerate) * config.questions,
  115. { starting: generatedResponseCount + config.batchSize },
  116. )
  117. profiles.forEach((profile, i) => {
  118. const startingIndex = i * config.questions
  119. for (let k = 0; k < config.questions; k++) {
  120. const resToEdit = responses[startingIndex + k]
  121. resToEdit.response_key_id = k + 1
  122. resToEdit.profile_id = profile.profile_id
  123. resToEdit.val =
  124. k + 1 == config.questions
  125. ? random.valFrom(config.possibleZipcodes)
  126. : random.valFrom(Object.values(possibleResponses))
  127. }
  128. })
  129. generatedResponseCount = generatedResponseCount + responses.length
  130. console.log('COMPLETED: Generated Responses...')
  131. return responses
  132. }
  133. /**
  134. * Our main generator loop
  135. */
  136. const writeBarrel = async () => {
  137. await fs.writeFile(`${config.mockOutputPath}/index.js`, '', () => {})
  138. }
  139. // writeBarrel()
  140. for (
  141. let batch = config.batchSize;
  142. batch <= config.total;
  143. batch += config.batchSize
  144. ) {
  145. const users = generateUsers()
  146. let jobPosterIds = users
  147. .filter(user => user.is_poster > 0)
  148. .map(user => user.user_id)
  149. // Guarentee ONE job poster
  150. if (!jobPosterIds.length) {
  151. random.valFrom(users).is_poster = 1
  152. jobPosterIds = users
  153. .filter(user => user.is_poster > 0)
  154. .map(user => user.user_id)
  155. }
  156. const profiles = generateProfiles(jobPosterIds)
  157. const responses = generateResponses(profiles)
  158. write(config.batchSize * batchCount, { users, profiles, responses })
  159. /**
  160. * Write barrel export
  161. */
  162. // const filename = `_batch_${config.batchSize * batchCount}.js`
  163. // fs.appendFile(
  164. // `${config.mockOutputPath}/index.js`,
  165. // `export * from './${filename}'\n`,
  166. // err => {
  167. // if (err) console.error(err)
  168. // },
  169. // )
  170. batchCount++
  171. }
  172. console.log('---\nFINISHED...\n===\n')