user.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import User from "../models/User.js";
  2. import {HttpError} from "../HttpError.js";
  3. import bcrypt from "bcrypt";
  4. import crypto from "crypto";
  5. const createRoute = async (req, res, next)=>{
  6. try{
  7. const user = await createUser(req.body);
  8. await user.save();
  9. res.json(responseUser(user));
  10. }catch(e){next(e)}
  11. }
  12. /*
  13. Create a new User object
  14. @param {Object} - Request body with user data
  15. @return {User} - User object
  16. */
  17. const createUser = async (data)=>{
  18. return new User({
  19. name: data.name,
  20. email: data.email.toLowerCase(),
  21. password: await hashPass(data.pass),
  22. workouts: [],
  23. uuid: createUuid()
  24. });
  25. }
  26. /*
  27. Hash a password
  28. @param {String} - Password to hash
  29. @return {String} - Hashed password
  30. */
  31. const hashPass = async (password)=>{
  32. return await bcrypt.hash(password, 10);
  33. }
  34. /*
  35. Create user object for sending to frontend
  36. @param {User} - User object
  37. @return {User} - Modified User object
  38. */
  39. const responseUser = (user)=>{
  40. return {
  41. id: user._id,
  42. name: user.name,
  43. email: user.email,
  44. workouts: user.workouts
  45. };
  46. }
  47. /*
  48. Create a new UUID token
  49. @return {String} - UUID token
  50. */
  51. const createUuid = ()=>{
  52. return crypto.randomUUID();
  53. }
  54. export {
  55. createRoute
  56. }