UserMembershipViewModel.coffee 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. ObjectId = require('mongojs').ObjectId
  2. UserGetter = require('../User/UserGetter')
  3. module.exports = UserMembershipViewModel =
  4. build: (userOrEmail) ->
  5. if userOrEmail._id
  6. buildUserViewModel userOrEmail
  7. else
  8. buildUserViewModelWithEmail userOrEmail
  9. buildAsync: (userOrIdOrEmail, callback = (error, viewModel)->) ->
  10. unless userOrIdOrEmail instanceof ObjectId
  11. # userOrIdOrEmail is a user or an email and can be parsed by #build
  12. return callback(null, UserMembershipViewModel.build(userOrIdOrEmail))
  13. userId = userOrIdOrEmail
  14. projection = { email: 1, first_name: 1, last_name: 1 }
  15. UserGetter.getUserOrUserStubById userId, projection, (error, user, isStub) ->
  16. if error? or !user?
  17. return callback(null, buildUserViewModelWithId(userId.toString()))
  18. if isStub
  19. return callback(null, buildUserViewModelWithStub(user))
  20. callback(null, buildUserViewModel(user))
  21. buildUserViewModel = (user, isInvite = false) ->
  22. _id: user._id or null
  23. email: user.email or null
  24. first_name: user.first_name or null
  25. last_name: user.last_name or null
  26. invite: isInvite
  27. buildUserViewModelWithEmail = (email) ->
  28. buildUserViewModel({ email }, true)
  29. buildUserViewModelWithStub = (user) ->
  30. # user stubs behave as invites
  31. buildUserViewModel(user, true)
  32. buildUserViewModelWithId = (id) ->
  33. buildUserViewModel({ _id: id }, false)