103 lines
2.1 KiB
JavaScript
103 lines
2.1 KiB
JavaScript
const httpStatus = require('http-status');
|
|
const { omit } = require('lodash');
|
|
const User = require('../models/user.model');
|
|
|
|
/**
|
|
* Load user and append to req.
|
|
* @public
|
|
*/
|
|
exports.load = async (req, res, next, id) => {
|
|
try {
|
|
const user = await User.get(id);
|
|
req.locals = { user };
|
|
return next();
|
|
} catch (error) {
|
|
return next(error);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Get user
|
|
* @public
|
|
*/
|
|
exports.get = (req, res) => res.json(req.locals.user.transform());
|
|
|
|
/**
|
|
* Get logged in user info
|
|
* @public
|
|
*/
|
|
exports.loggedIn = (req, res) => res.json(req.user.transform());
|
|
|
|
/**
|
|
* Create new user
|
|
* @public
|
|
*/
|
|
exports.create = async (req, res, next) => {
|
|
try {
|
|
const user = new User(req.body);
|
|
const savedUser = await user.save();
|
|
res.status(httpStatus.CREATED);
|
|
res.json(savedUser.transform());
|
|
} catch (error) {
|
|
next(User.checkDuplicateEmail(error));
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Replace existing user
|
|
* @public
|
|
*/
|
|
exports.replace = async (req, res, next) => {
|
|
try {
|
|
const { user } = req.locals;
|
|
const newUser = new User(req.body);
|
|
const ommitRole = user.role !== 'admin' ? 'role' : '';
|
|
const newUserObject = omit(newUser.toObject(), '_id', ommitRole);
|
|
|
|
|
|
res.json(savedUser.transform());
|
|
} catch (error) {
|
|
next(User.checkDuplicateEmail(error));
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Update existing user
|
|
* @public
|
|
*/
|
|
exports.update = (req, res, next) => {
|
|
const ommitRole = req.locals.user.role !== 'admin' ? 'role' : '';
|
|
const updatedUser = omit(req.body, ommitRole);
|
|
const user = Object.assign(req.locals.user, updatedUser);
|
|
|
|
user.save()
|
|
.then(savedUser => res.json(savedUser.transform()))
|
|
.catch(e => next(User.checkDuplicateEmail(e)));
|
|
};
|
|
|
|
/**
|
|
* Get user list
|
|
* @public
|
|
*/
|
|
exports.list = async (req, res, next) => {
|
|
try {
|
|
const users = await User.list(req.query);
|
|
const transformedUsers = users.map(user => user.transform());
|
|
res.json(transformedUsers);
|
|
} catch (error) {
|
|
next(error);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Delete user
|
|
* @public
|
|
*/
|
|
exports.remove = (req, res, next) => {
|
|
const { user } = req.locals;
|
|
|
|
user.remove()
|
|
.then(() => res.status(httpStatus.NO_CONTENT).end())
|
|
.catch(e => next(e));
|
|
};
|