const bcrypt = require("bcryptjs/dist/bcrypt") const { Router } = require("express") const User = require("../database/models/user") const {getUserValidator} = require("../validators/users") const getUsers = async (req, res, next) => { const allUsers = await User.find({}) return res.status(200).send(allUsers) } const getUser = async (req, res, next) => { const result = getUserValidator.validate(req.body) console.log(result) try { const id = req.params.id if (!id) { return res.status(400).send('Bad request') } const user = await User.findById(id) if (!user) { return res.status(404).send("User with the id of: " + id + " doesnt exist") } return res.json(user) } catch (e) { next(e) } } const createUser = async (req, res, next) => { try { const userModel = req.body if (Object.entries(userModel).length === 0) { return res.status(400).send('Object cant be empty') } const err = getUserValidator.validate(userModel).error if (err) { return res.status(400).send(err.message) } const newUser = new User(userModel) newUser.password = await bcrypt.hash(newUser.password, 8) await newUser.save() return res.status(201).json(newUser) } catch (e) { next(e) } } const updateUser = async (req, res, next) => { try { const id = req.params.id const objBody = req.body if (Object.entries(objBody).length == 0) { return res.status(400).send('Invalid input parameters') } const err = getUserValidator.validate(objBody).error if (err) { return res.status(400).send(err.message) } let user = await User.findById(id); if (!user) { return res.status(404).send("User with the id of: " + id + " doesnt exist") } user.name = objBody.name user.password = objBody.password user.email = objBody.email await User.updateOne(user) return res.status(200).send('User updated successfully') } catch (e) { next(e) } } const updateUserContacts = async (req, res, next) => { try { userFound = true if (!userFound) { return res.status(404).send('user not found') } if (Object.entries(req.body).length == 0) { return res.status(400).send('invalid input parameters') } return res.status(200).send('user contacts updated successfully') } catch (e) { next(e) } } const deleteUser = async (req, res, next) => { try { const id = req.params.id if (!id) { return res.status(400).send('You need to provide valid Id') } const user = await User.findById(id) if (!user) { return res.status(404).send("User with the id of: " + id + " doesnt exist") } await User.deleteOne(user) return res.status(204).send('Deleting user with id of ' + id) } catch (e) { next(e) } } module.exports = { getUsers, getUser, createUser, updateUser, updateUserContacts, deleteUser }