ProjectGetter.coffee 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. mongojs = require("../../infrastructure/mongojs")
  2. db = mongojs.db
  3. ObjectId = mongojs.ObjectId
  4. async = require "async"
  5. Errors = require("../../errors")
  6. logger = require("logger-sharelatex")
  7. module.exports = ProjectGetter =
  8. EXCLUDE_DEPTH: 8
  9. getProjectWithoutDocLines: (project_id, callback=(error, project) ->) ->
  10. excludes = {}
  11. for i in [1..ProjectGetter.EXCLUDE_DEPTH]
  12. excludes["rootFolder#{Array(i).join(".folder")}.docs.lines"] = 0
  13. db.projects.find _id: ObjectId(project_id.toString()), excludes, (error, projects = []) ->
  14. callback error, projects[0]
  15. getProjectWithOnlyFolders: (project_id, callback=(error, project) ->) ->
  16. excludes = {}
  17. for i in [1..ProjectGetter.EXCLUDE_DEPTH]
  18. excludes["rootFolder#{Array(i).join(".folder")}.docs"] = 0
  19. excludes["rootFolder#{Array(i).join(".folder")}.fileRefs"] = 0
  20. db.projects.find _id: ObjectId(project_id.toString()), excludes, (error, projects = []) ->
  21. callback error, projects[0]
  22. getProject: (query, projection, callback = (error, project) ->) ->
  23. if !query?
  24. return callback("no query provided")
  25. if typeof(projection) == "function"
  26. callback = projection
  27. if typeof query == "string"
  28. query = _id: ObjectId(query)
  29. else if query instanceof ObjectId
  30. query = _id: query
  31. else if query?.toString().length == 24 # sometimes mongoose ids are hard to identify, this will catch them
  32. query = _id: ObjectId(query.toString())
  33. else
  34. err = new Error("malformed get request")
  35. logger.log query:query, err:err, type:typeof(query), "malformed get request"
  36. return callback(err)
  37. db.projects.find query, projection, (err, project)->
  38. if err?
  39. logger.err err:err, query:query, projection:projection, "error getting project"
  40. return callback(err)
  41. callback(null, project?[0])
  42. populateProjectWithUsers: (project, callback=(error, project) ->) ->
  43. # eventually this should be in a UserGetter.getUser module
  44. getUser = (user_id, callback=(error, user) ->) ->
  45. unless user_id instanceof ObjectId
  46. user_id = ObjectId(user_id)
  47. db.users.find _id: user_id, (error, users = []) ->
  48. callback error, users[0]
  49. jobs = []
  50. jobs.push (callback) ->
  51. getUser project.owner_ref, (error, user) ->
  52. return callback(error) if error?
  53. if user?
  54. project.owner_ref = user
  55. callback null, project
  56. readOnly_refs = project.readOnly_refs
  57. project.readOnly_refs = []
  58. for readOnly_ref in readOnly_refs
  59. do (readOnly_ref) ->
  60. jobs.push (callback) ->
  61. getUser readOnly_ref, (error, user) ->
  62. return callback(error) if error?
  63. if user?
  64. project.readOnly_refs.push user
  65. callback null, project
  66. collaberator_refs = project.collaberator_refs
  67. project.collaberator_refs = []
  68. for collaberator_ref in collaberator_refs
  69. do (collaberator_ref) ->
  70. jobs.push (callback) ->
  71. getUser collaberator_ref, (error, user) ->
  72. return callback(error) if error?
  73. if user?
  74. project.collaberator_refs.push user
  75. callback null, project
  76. async.parallelLimit jobs, 3, (error) -> callback error, project