user.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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. name: user.name,
  42. email: user.email,
  43. workouts: user.workouts
  44. };
  45. }
  46. /*
  47. Create a new UUID token
  48. @return {String} - UUID token
  49. */
  50. const createUuid = ()=>{
  51. return crypto.randomUUID();
  52. }
  53. export {
  54. createRoute
  55. }