session.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import Session from "../models/Session.js";
  2. import Workout from "../models/Workout.js";
  3. const createRoute = async (req, res, next)=>{
  4. try{
  5. const session = createSession(req.body);
  6. await session.save();
  7. res.json(responseSession(session));
  8. }catch(e){next(e)}
  9. }
  10. const getRoute = async (req, res, next)=>{
  11. try{
  12. const [workout, sessions] = Promise.all(
  13. Workout.findOne({_id: req.params.workoutId}),
  14. Session.find({workout: req.params.workoutId}).limit(5)
  15. );
  16. confirmWorkoutOwnership(workout, res.locals.user);
  17. res.json(sessions.map(s => responseSession(s)));
  18. }catch(e){next(e)}
  19. }
  20. /*
  21. Create a new Session object
  22. @param {Object} - Body data from the object
  23. @return {Session} - Newly created Session object
  24. */
  25. const createSession = (data)=>{
  26. return new Session({
  27. workout: data.workout,
  28. start: new Date(data.start),
  29. end: new Date(data.end),
  30. notes: data.notes,
  31. exercises: data.exercises
  32. });
  33. }
  34. /*
  35. Throw error if user does now own workout
  36. @param {Workout} workout - Workout object
  37. @param {User} user - User object
  38. */
  39. const confirmWorkoutOwnership = (workout, user)=>{
  40. if(workout.user.toString() !== user._id.toString()){
  41. throw new HttpError(403, "Unauthorized");
  42. }
  43. }
  44. /*
  45. Create modified Session for sending to frontend
  46. @param {Session} - Session object
  47. @return {Object} - Modified session object
  48. */
  49. const responseSession = (session)=>{
  50. return {
  51. workout: session.workout,
  52. start: session.start,
  53. end: session.end,
  54. notes: session.notes,
  55. exercises: session.exercises
  56. };
  57. }
  58. export {
  59. createRoute,
  60. getRoute
  61. }