| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import Session from "../models/Session.js";
- import Workout from "../models/Workout.js";
- import mongoose from "mongoose";
- const ObjectId = mongoose.Types.ObjectId;
- const createRoute = async (req, res, next)=>{
- try{
- const session = createSession(req.body);
- await session.save();
- res.json(responseSession(session));
- }catch(e){next(e)}
- }
- const getRoute = async (req, res, next)=>{
- try{
- const [workout, sessions] = await Promise.all([
- Workout.findOne({_id: req.params.workoutId}),
- Session.aggregate([
- {$match: {workout: new ObjectId(req.params.workoutId)}},
- {$sort: {start: -1}},
- {$limit: 5}
- ])
- ]);
- confirmWorkoutOwnership(workout, res.locals.user);
- res.json(sessions.map(s => responseSession(s)));
- }catch(e){next(e)}
- }
- const getAllRoute = async (req, res, next)=>{
- try{
- const [workout, sessions] = await Promise.all([
- Workout.findOne({_id: req.params.workoutId}),
- Session.aggregate([
- {$match: {workout: new ObjectId(req.params.workoutId)}},
- {$sort: {start: -1}}
- ])
- ]);
- confirmWorkoutOwnership(workout, res.locals.user);
- res.json(sessions.map(s => responseSession(s)));
- }catch(e){next(e)}
- }
- /*
- Create a new Session object
- @param {Object} - Body data from the object
- @return {Session} - Newly created Session object
- */
- const createSession = (data)=>{
- return new Session({
- workout: data.workout,
- start: new Date(data.start),
- end: new Date(data.end),
- exercises: data.exercises
- });
- }
- /*
- Throw error if user does now own workout
- @param {Workout} workout - Workout object
- @param {User} user - User object
- */
- const confirmWorkoutOwnership = (workout, user)=>{
- if(workout.user.toString() !== user._id.toString()){
- throw new HttpError(403, "Unauthorized");
- }
- }
- /*
- Create modified Session for sending to frontend
- @param {Session} - Session object
- @return {Object} - Modified session object
- */
- const responseSession = (session)=>{
- return {
- workout: session.workout,
- start: session.start,
- end: session.end,
- exercises: session.exercises
- };
- }
- export {
- createRoute,
- getRoute,
- getAllRoute
- }
|