UserGetter.coffee 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. mongojs = require("../../infrastructure/mongojs")
  2. metrics = require('metrics-sharelatex')
  3. logger = require('logger-sharelatex')
  4. db = mongojs.db
  5. ObjectId = mongojs.ObjectId
  6. module.exports = UserGetter =
  7. getUser: (query, projection, callback = (error, user) ->) ->
  8. if arguments.length == 2
  9. callback = projection
  10. projection = {}
  11. if typeof query == "string"
  12. try
  13. query = _id: ObjectId(query)
  14. catch e
  15. return callback(null, null)
  16. else if query instanceof ObjectId
  17. query = _id: query
  18. db.users.findOne query, projection, callback
  19. getUsers: (user_ids, projection, callback = (error, users) ->) ->
  20. try
  21. user_ids = user_ids.map (u) -> ObjectId(u.toString())
  22. catch error
  23. return callback error
  24. db.users.find { _id: { $in: user_ids} }, projection, callback
  25. getUserOrUserStubById: (user_id, projection, callback = (error, user) ->) ->
  26. try
  27. query = _id: ObjectId(user_id.toString())
  28. catch e
  29. return callback(new Error(e))
  30. db.users.findOne query, projection, (error, user) ->
  31. return callback(error) if error?
  32. return callback(null, user) if user?
  33. db.userstubs.findOne query, projection, callback
  34. [
  35. 'getUser',
  36. 'getUsers',
  37. 'getUserOrUserStubById'
  38. ].map (method) ->
  39. metrics.timeAsyncMethod UserGetter, method, 'mongo.UserGetter', logger