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.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  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) *
  110. mock.response_keys.length,
  111. { starting: generatedResponseCount + config.batchSize },
  112. )
  113. profiles.forEach((profile, i) => {
  114. const startingIndex = i * mock.response_keys.length
  115. for (let k = 0; k < mock.response_keys.length; k++) {
  116. const resToEdit = responses[startingIndex + k]
  117. resToEdit.response_key_id = k + 1
  118. resToEdit.profile_id = profile.profile_id
  119. if (resToEdit.response_key_id < config.zipcodeKey) {
  120. resToEdit.val = random.valFrom(Object.values(possibleResponses))
  121. } else if (resToEdit.response_key_id == config.zipcodeKey) {
  122. resToEdit.val = random.valFrom(config.possibleZipcodes)
  123. } else {
  124. switch (resToEdit.response_key_id) {
  125. case config.mediaKey:
  126. resToEdit.val = random.media()
  127. break
  128. case config.langKey:
  129. resToEdit.val = random.language()
  130. break
  131. case 10:
  132. resToEdit.val = random.duration()
  133. break
  134. case 11:
  135. resToEdit.val = random.location()
  136. break
  137. case config.blurbKey:
  138. resToEdit.val = random.blurb()
  139. break
  140. }
  141. }
  142. }
  143. })
  144. generatedResponseCount = generatedResponseCount + responses.length
  145. console.log('COMPLETED: Generated Responses...')
  146. return responses
  147. }
  148. /**
  149. * Our main generator loop
  150. */
  151. for (
  152. let batch = config.batchSize;
  153. batch <= config.total;
  154. batch += config.batchSize
  155. ) {
  156. const users = generateUsers()
  157. let jobPosterIds = users
  158. .filter(user => user.is_poster > 0)
  159. .map(user => user.user_id)
  160. // Guarantee ONE job poster
  161. if (!jobPosterIds.length) {
  162. random.valFrom(users).is_poster = 1
  163. jobPosterIds = users
  164. .filter(user => user.is_poster > 0)
  165. .map(user => user.user_id)
  166. }
  167. const profiles = generateProfiles(jobPosterIds)
  168. const responses = generateResponses(profiles)
  169. write(config.batchSize * batchCount, { users, profiles, responses })
  170. batchCount++
  171. }
  172. console.log('---\nFINISHED...\n===\n')