ProjectGetter.coffee 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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: (user_id, fields, callback = (error, ownedProjects, readAndWriteProjects, readOnlyProjects) ->) ->
  44. CollaboratorsHandler = require "../Collaborators/CollaboratorsHandler"
  45. Project.find {owner_ref: user_id}, fields, (error, projects) ->
  46. return callback(error) if error?
  47. CollaboratorsHandler.getProjectsUserIsCollaboratorOf user_id, fields, (error, readAndWriteProjects, readOnlyProjects) ->
  48. return callback(error) if error?
  49. callback null, projects, readAndWriteProjects, readOnlyProjects
  50. [
  51. 'getProject',
  52. 'getProjectWithoutDocLines'
  53. ].map (method) ->
  54. metrics.timeAsyncMethod(ProjectGetter, method, 'mongo.ProjectGetter', logger)