prepopulate.coffee 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. # Usage: coffee preprocess.coffee projects.json done.csv
  2. # where projects.json is the output of
  3. # mongoexport <CREDENTIALS> --db sharelatex-staging --collection projects --type=json --fields owner_ref,collaberator_refs,readOnly_refs --query '{ $or: [{collaberator_refs: { $not : {$size: 0} }}, {readOnly_refs: { $not: {$size: 0}}}]}'
  4. fs = require "fs"
  5. projects = fs.readFileSync(process.argv[2]).toString()
  6. projects = projects.split("\n").filter((p) -> p!="").map (p) -> JSON.parse(p)
  7. contact_pairs = []
  8. for project in projects
  9. project_id = project._id.$oid
  10. owner_id = project.owner_ref.$oid
  11. contact_ids = project.collaberator_refs.concat(project.readOnly_refs).map (r) -> r.$oid
  12. for contact_id in contact_ids
  13. contact_pairs.push [project_id, owner_id, contact_id]
  14. # Done list is a list of pairs owner_id:contact_id
  15. DONE_FILE = process.argv[3]
  16. done_list = fs.readFileSync(DONE_FILE).toString()
  17. done_contacts = {}
  18. for done_pair in done_list.split("\n")
  19. done_contacts[done_pair] = true
  20. workers = []
  21. for contact_pair in contact_pairs
  22. do (contact_pair) ->
  23. workers.push (cb) ->
  24. if done_contacts[contact_pair.join(":")]
  25. console.log "ALREADY DONE", contact_pair.join(":"), "SKIPPING"
  26. cb()
  27. else
  28. [project_id, owner_id, contact_id] = contact_pair
  29. console.log "PINGING CONTACT API (OWNER: #{owner_id}, CONTACT: #{contact_id})..."
  30. require("request").post {
  31. url: "http://localhost:3036/user/#{owner_id}/contacts"
  32. json: { contact_id }
  33. }, (error, response, body) ->
  34. return cb(error) if error?
  35. if response.statusCode != 204
  36. return cb(new Error("bad status code: #{response.statusCode}"))
  37. console.log "DONE, WRITING TO DONE FILE..."
  38. fs.appendFile DONE_FILE, contact_pair.join(":") + "\n", (error) ->
  39. return cb(error) if error?
  40. console.log "WRITTEN"
  41. cb()
  42. require("async").series workers, (error) ->
  43. console.error error if error?
  44. console.log "DONE"