mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-14 20:40:17 -05:00
46 lines
1.3 KiB
CoffeeScript
46 lines
1.3 KiB
CoffeeScript
|
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)
|