session.js 2.3 KB

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