get-express-starter
Version:
Get production ready express boilerplate with a single command
84 lines (73 loc) • 2.39 kB
JavaScript
const fs = require('fs');
const csv = require('csv-parser');
const httpStatus = require('http-status');
const catchAsync = require('../utils/catchAsync');
const pick = require('../utils/pick');
const ApiError = require('../utils/ApiError');
const { userService } = require('../services');
const createUser = catchAsync(async (req, res) => {
const user = await userService.createUser(req.body);
res.status(httpStatus.CREATED).send(user);
});
const bulkInsertUsers = catchAsync(async (req, res) => {
if (!req.file) {
throw new ApiError(httpStatus.BAD_REQUEST, 'File is required');
}
const users = [];
fs.createReadStream(req.file.path)
.pipe(
csv({
separator: ',',
mapHeaders: ({ header }) => header.trim().toLowerCase(),
})
)
.on('data', (row) => {
users.push(row);
})
.on('end', async () => {
const result = await userService.bulkInsertUsers(users);
res.status(httpStatus.CREATED).send(result);
fs.unlinkSync(req.file.path);
});
});
const getUsers = catchAsync(async (req, res) => {
const filter = pick(req.query, ['search', 'role']);
const options = pick(req.query, ['sortBy', 'limit', 'page']);
const result = await userService.queryUsers(filter, options);
res.send(result);
});
const getUser = catchAsync(async (req, res) => {
const userId = req.user.role === 'admin' ? req.params.userId : req.user.id;
const user = await userService.getUserById(userId);
res.send(user);
});
const getUserProfile = catchAsync(async (req, res) => {
const { id } = req.user;
const user = await userService.getUserById(id);
res.status(httpStatus.OK).send(user);
});
const updateUser = catchAsync(async (req, res) => {
const user = await userService.updateUserById(req.params.userId, req.body);
res.send(user);
});
const updateUserProfile = catchAsync(async (req, res) => {
const { id } = req.user;
const updatedUser = req.body.newPassword
? await userService.changePassword(id, req.body)
: await userService.updateUserById(id, req.body);
res.send(updatedUser);
});
const deleteUser = catchAsync(async (req, res) => {
await userService.deleteUserById(req.params.userId);
res.status(httpStatus.NO_CONTENT).send();
});
module.exports = {
createUser,
bulkInsertUsers,
getUsers,
getUser,
updateUser,
getUserProfile,
updateUserProfile,
deleteUser,
};