overleaf/services/web/app/coffee/Features/UserMembership/UserMembershipViewModel.coffee

46 lines
1.3 KiB
CoffeeScript
Raw Normal View History

2018-09-25 09:10:06 -04:00
ObjectId = require('mongojs').ObjectId
UserGetter = require('../User/UserGetter')
module.exports = UserMembershipViewModel =
build: (userOrEmail) ->
if userOrEmail._id
buildUserViewModel userOrEmail
else
buildUserViewModelWithEmail userOrEmail
buildAsync: (userOrIdOrEmail, callback = (error, viewModel)->) ->
unless userOrIdOrEmail instanceof ObjectId
# userOrIdOrEmail is a user or an email and can be parsed by #build
return callback(null, UserMembershipViewModel.build(userOrIdOrEmail))
userId = userOrIdOrEmail
projection = { email: 1, first_name: 1, last_name: 1 }
UserGetter.getUserOrUserStubById userId, projection, (error, user, isStub) ->
if error? or !user?
return callback(null, buildUserViewModelWithId(userId.toString()))
if isStub
return callback(null, buildUserViewModelWithStub(user))
callback(null, buildUserViewModel(user))
buildUserViewModel = (user, isInvite = false) ->
_id: user._id or null
email: user.email or null
first_name: user.first_name or null
last_name: user.last_name or null
invite: isInvite
buildUserViewModelWithEmail = (email) ->
buildUserViewModel({ email }, true)
buildUserViewModelWithStub = (user) ->
# user stubs behave as invites
buildUserViewModel(user, true)
buildUserViewModelWithId = (id) ->
buildUserViewModel({ _id: id }, false)