Explorar el Código

Create route to fetch most recent sessions for the workout.

Lee Morgan hace 1 año
padre
commit
1004d12ee0
Se han modificado 7 ficheros con 51 adiciones y 3 borrados
  1. 25 1
      controllers/session.js
  2. 13 0
      documentation/data.js
  3. 3 1
      routes/session.js
  4. 2 0
      views/index.html
  5. 2 0
      views/index.js
  6. 1 1
      views/js/pages/home.js
  7. 5 0
      views/js/pages/session.js

+ 25 - 1
controllers/session.js

@@ -1,4 +1,5 @@
 import Session from "../models/Session.js";
+import Workout from "../models/Workout.js";
 
 const createRoute = async (req, res, next)=>{
     try{
@@ -8,6 +9,17 @@ const createRoute = async (req, res, next)=>{
     }catch(e){next(e)}
 }
 
+const getRoute = async (req, res, next)=>{
+    try{
+        const [workout, sessions] = Promise.all(
+            Workout.findOne({_id: req.params.workoutId}),
+            Session.find({workout: req.params.workoutId}).limit(5)
+        );
+        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
@@ -23,6 +35,17 @@ const createSession = (data)=>{
     });
 }
 
+/*
+ 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
@@ -39,5 +62,6 @@ const responseSession = (session)=>{
 }
 
 export {
-    createRoute
+    createRoute,
+    getRoute
 }

+ 13 - 0
documentation/data.js

@@ -253,5 +253,18 @@ window.data = [
             type: "Session",
             desc: "Session object"
         }]
+    },
+    {
+        type: "route",
+        id: "getSessions",
+        title: "Get",
+        url: "GET /session/:workoutId",
+        auth: true,
+        description: "Retrieve the previous 5 sessions recorded for a specific workout",
+        responseBody: [{
+            name: "N/A",
+            type: "[Session]",
+            desc: "List of Session objects"
+        }]
     }
 ]

+ 3 - 1
routes/session.js

@@ -1,9 +1,11 @@
 import {
-    createRoute
+    createRoute,
+    getRoute
 } from "../controllers/session.js";
 
 import {userAuth} from "../auth.js";
 
 export default (app)=>{
     app.post("/session", userAuth, createRoute);
+    app.get("/session/:workoutId", userAuth, createRoute);
 }

+ 2 - 0
views/index.html

@@ -114,6 +114,8 @@
         <button id="newWorkoutFinish" class="button">Create Workout</button>
     </div>
 
+    <div id="sessionPage" class="page"></div>
+
     <script src="/index.js"></script>
 </body>
 </html>

+ 2 - 0
views/index.js

@@ -2,6 +2,7 @@ import registerPage from "./js/pages/register.js";
 import loginPage from "./js/pages/login.js";
 import homePage from "./js/pages/home.js";
 import newWorkoutPage from "./js/pages/newWorkout.js";
+import sessionPage from "./js/pages/session.js";
 
 const notifier = document.getElementById("notifier");
 const pageElements = document.querySelectorAll(".page");
@@ -30,5 +31,6 @@ window.changePage = (page, data)=>{
         case "register": registerPage.render(); break;
         case "home": homePage.render(data); break;
         case "newWorkout": newWorkoutPage.render();
+        case "session": sessionPage.render(data); break;
     }
 }

+ 1 - 1
views/js/pages/home.js

@@ -68,7 +68,7 @@ export default {
         button.classList.add("button");
         button.textContent = workout.name;
         button.addEventListener("click", ()=>{
-            changePage("workout", workout);
+            changePage("session", workout);
         });
         this.workoutList.appendChild(button);
     }

+ 5 - 0
views/js/pages/session.js

@@ -0,0 +1,5 @@
+export default {
+    render: function(workout){
+        console.log("rendering");
+    }
+}