Last active
May 29, 2017 09:51
-
-
Save impactmass/5ed1a4e9d2bbf82cfb718b366482be81 to your computer and use it in GitHub Desktop.
Beginner: Use of descriptive functions + promise chain
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const UserController = { | |
create(req, res) { | |
const userData = req.body; | |
const query = { | |
where: { email: userData.email } | |
}; | |
const defaultRole = { | |
where: { title: 'Writer' } | |
}; | |
Users.findOne(query) | |
.then(checkReturnedUser) | |
.then(getDefaultRoleInfo) | |
.then(createUser) | |
.then(generateToken) | |
.then(resHandler) | |
.catch(errorHandler); | |
function checkReturnedUser(user) { | |
if (user) { | |
throw new Error('checkReturnedUSer'); | |
} | |
return user; | |
} | |
function getDefaultRoleInfo() { | |
return Roles.findOne(defaultRole); | |
} | |
function createUser(role) { | |
return Users.create(Object.assign({}, userData, { roleId: role.id })); | |
} | |
function generateToken(newUserObj) { | |
const payload = { roleId: newUserObj.roleId, email: newUserObj.email }; | |
return { | |
newUser: newUserObj, | |
token: jwt.sign(payload, config.jwtSecret, { expiresIn: '24h' }) | |
}; | |
} | |
function resHandler(resObj) { | |
return res.status(201).send(Object.assign({}, resObj, { | |
message: 'User signup completed successfully' | |
})); | |
} | |
function errorHandler(error) { | |
const message = error.message; | |
if (message === 'checkReturnedUSer') { | |
return res.status(400).send({ | |
error: 'An account with that email address already exists' | |
}); | |
} | |
return res.status(500).send({ error }); | |
} | |
} | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment