ProjectGetter.coffee 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. mongojs = require("../../infrastructure/mongojs")
  2. metrics = require("metrics-sharelatex")
  3. db = mongojs.db
  4. ObjectId = mongojs.ObjectId
  5. async = require "async"
  6. Project = require("../../models/Project").Project
  7. logger = require("logger-sharelatex")
  8. module.exports = ProjectGetter =
  9. EXCLUDE_DEPTH: 8
  10. getProjectWithoutDocLines: (project_id, callback=(error, project) ->) ->
  11. excludes = {}
  12. for i in [1..ProjectGetter.EXCLUDE_DEPTH]
  13. excludes["rootFolder#{Array(i).join(".folder")}.docs.lines"] = 0
  14. db.projects.find _id: ObjectId(project_id.toString()), excludes, (error, projects = []) ->
  15. callback error, projects[0]
  16. getProjectWithOnlyFolders: (project_id, callback=(error, project) ->) ->
  17. excludes = {}
  18. for i in [1..ProjectGetter.EXCLUDE_DEPTH]
  19. excludes["rootFolder#{Array(i).join(".folder")}.docs"] = 0
  20. excludes["rootFolder#{Array(i).join(".folder")}.fileRefs"] = 0
  21. db.projects.find _id: ObjectId(project_id.toString()), excludes, (error, projects = []) ->
  22. callback error, projects[0]
  23. getProject: (query, projection, callback = (error, project) ->) ->
  24. if !query?
  25. return callback("no query provided")
  26. if typeof(projection) == "function"
  27. callback = projection
  28. if typeof query == "string"
  29. query = _id: ObjectId(query)
  30. else if query instanceof ObjectId
  31. query = _id: query
  32. else if query?.toString().length == 24 # sometimes mongoose ids are hard to identify, this will catch them
  33. query = _id: ObjectId(query.toString())
  34. else
  35. err = new Error("malformed get request")
  36. logger.log query:query, err:err, type:typeof(query), "malformed get request"
  37. return callback(err)
  38. db.projects.find query, projection, (err, project)->
  39. if err?
  40. logger.err err:err, query:query, projection:projection, "error getting project"
  41. return callback(err)
  42. callback(null, project?[0])
  43. findAllUsersProjects: (
  44. user_id,
  45. fields,
  46. callback = (error, projects={owned: [], readAndWrite: [], readOnly: [], tokenReadAndWrite: [], tokenReadOnly: []}) ->
  47. ) ->
  48. CollaboratorsHandler = require "../Collaborators/CollaboratorsHandler"
  49. Project.find {owner_ref: user_id}, fields, (error, ownedProjects) ->
  50. return callback(error) if error?
  51. CollaboratorsHandler.getProjectsUserIsMemberOf user_id, fields, (error, projects) ->
  52. return callback(error) if error?
  53. result = {
  54. owned: ownedProjects || [],
  55. readAndWrite: projects.readAndWrite || [],
  56. readOnly: projects.readOnly || [],
  57. tokenReadAndWrite: projects.tokenReadAndWrite || [],
  58. tokenReadOnly: projects.tokenReadOnly || []
  59. }
  60. callback null, result
  61. [
  62. 'getProject',
  63. 'getProjectWithoutDocLines'
  64. ].map (method) ->
  65. metrics.timeAsyncMethod(ProjectGetter, method, 'mongo.ProjectGetter', logger)