ProjectGetter.coffee 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. mongojs = require("../../infrastructure/mongojs")
  2. db = mongojs.db
  3. ObjectId = mongojs.ObjectId
  4. async = require "async"
  5. Project = require("../../models/Project").Project
  6. Errors = require("../../errors")
  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