src/controllers/UserController.js
// Import the neccesary modules.
import passport from 'passport';
import User from '../models/user';
/** Class for CRUD operations for users. */
export default class UserController {
/** Create a new UserController object */
constructor() {
/**
* The projection used for getting multiple users.
* @type {Object}
*/
UserController._projection = {
username: 1,
firstname: 1,
lastname: 1,
email: 1
};
}
/**
* Register a new user.
* @param {Request} req - The express request object.
* @param {Response} res - The express response object.
* @param {function} next - The next function for Express.
* @returns {JSON} - The authentication token for the user.
*/
register(req, res, next) {
const { firstname, lastname, email, username, password } = req.body;
if (!username || !password) return res.status(400).json({
message: 'Please fill out all fields'
});
const user = new User({
firstname,
lastname,
email,
username,
password
});
user._id = username;
user.save(err => {
if (err) return next(err);
return res.json({
user,
token: user.generateJWT()
})
});
}
/**
* Login with an user.
* @param {Request} req - The express request object.
* @param {Response} res - The express response object.
* @param {function} next - The next function for Express.
* @returns {JSON} - The authentication token for the user.
*/
login(req, res, next) {
const { username, password } = req.body;
if (!username || !password) return res.status(400).json({
message: 'Please fill out all fields'
});
const auth = passport.authenticate('local', (err, user, info) => {
if (err) return next(err);
if (!user) return res.json(info);
return res.json({
user,
token: user.generateJWT()
});
});
return auth(req, res, next);
}
/**
* Get an user based on the id.
* @param {Request} req - The express request object.
* @param {Response} res - The express response object.
* @param {function} next - The next function for Express.
* @returns {JSON} - A user based on the given id.
*/
getUser(req, res, next) {
return User.findOne({
_id: req.params.user
}).exec()
.then(user => res.json(user))
.catch(err => next(err));
}
}