UNPKG

simplewebparser-glenda-daugherty

Version:

A project template using Express.js as a Node.js framework.

124 lines (96 loc) 3.55 kB
const { v4: uuid } = require('uuid'); const logger = require('../../../../helpers/lib/logger'); const response = require('../../../../helpers/utils/response'); const User = require('../models/User'); const Crypt = require('../../../../helpers/utils/crypt'); const { CODE } = require('../../../../helpers/lib/httpCode'); /** * @class * UserCommand * * @function createUsers - A function to create a user. * Check {@link ../models/User.js} for the list of payloads needed. * * @function loginUsers * @param {string} req.body.email - User email * @param {string} req.body.password - User password * * @function updateUsers - A function to update a user. * @param {string} req.params.userId - UserId * Check {@link ../models/User.js} - for the list of payloads needed. * * @function deleteUsers - A function to delete a user. * @param {string} req.params.userId - UserId */ class UserCommand { static async createUsers(req, res) { const cx = 'users-createUsers'; const payload = { ...req.body }; const findByEmail = await User.findOne({ email: payload.email }); if (findByEmail) { logger.error(cx, 'Email already registered.'); return response.error(res, 'Email already registered!', CODE.BAD_REQUEST); } const password = await Crypt.hash(payload.password); const user = await User.create({ ...payload, userId: uuid(), email: payload.email.toLowerCase(), password: password, }); return response.data(res, 'User created successfully!', user); } static async loginUsers(req, res) { const cx = 'users-loginUsers'; const payload = { ...req.body }; const user = await User.findOne({ email: payload.email }); if (!user) { logger.error(cx, 'Email not found.'); return response.error(res, 'Email not found!', CODE.NOT_FOUND); } const token = await Crypt.signToken(res, user, payload); const result = { userId: user._doc.userId, email: payload.email, expiresIn: 86400, accessToken: token }; return response.data(res, 'You have logged in!', result); } static async updateUsers(req, res) { const cx = 'users-updateUsers'; const payload = { ...req.params, ...req.body }; const findByUserId = await User.findOne({ userId: payload.userId }); if (!findByUserId) { logger.error(cx, 'User not found.'); return response.error(res, 'User not found!', CODE.NOT_FOUND); } const data = { name: payload.name, email: payload.email, address: payload.address }; const user = await User.updateOne({ userId: payload.userId }, data); if (!user) { logger.error(cx, 'Failed to update user data.'); return response.error(res, 'Failed to update user data!', CODE.INTERNAL_ERROR); } return response.data(res, 'User updated successfully!', user); } static async deleteUsers(req, res) { const cx = 'users-deleteUsers'; const payload = { ...req.params }; const findByUserId = await User.findOne({ userId: payload.userId }); if (!findByUserId) { logger.error(cx, 'User not found.'); return response.error(res, 'User not found!', CODE.NOT_FOUND); } const user = await User.deleteOne({ userId: payload.userId }); if (!user) { logger.error(cx, 'Failed to delete user.'); return response.error(res, 'Failed to delete user!', CODE.INTERNAL_ERROR); } return response.data(res, 'User deleted successfully!', user); } } module.exports = UserCommand;