From 173c0b63c426585a21875035d66295962ee35bf5 Mon Sep 17 00:00:00 2001 From: nicoagostini Date: Tue, 6 May 2025 18:36:25 -0700 Subject: [PATCH] Plan detail page finished with mock data --- src/auth/authentication.js | 1 + src/router/user.js | 42 ++++++++++++++++++++ src/views/dashboard.ejs | 5 ++- src/views/newPlan.ejs | 4 +- src/views/partials/footer.ejs | 2 +- src/views/partials/navBar.ejs | 2 +- src/views/planDetail.ejs | 74 +++++++++++++++++++++++++++++++++++ src/views/plans.ejs | 6 +-- src/views/questionnaire.ejs | 2 +- src/views/signup.ejs | 6 --- 10 files changed, 128 insertions(+), 16 deletions(-) create mode 100644 src/views/planDetail.ejs diff --git a/src/auth/authentication.js b/src/auth/authentication.js index 261b5a4..7702450 100644 --- a/src/auth/authentication.js +++ b/src/auth/authentication.js @@ -76,6 +76,7 @@ module.exports = (users) => { email: req.body.email, name: req.body.name, password: hashedPassword, + financialData: false, }).then((results, err) => { if (err) { console.error(err); diff --git a/src/router/user.js b/src/router/user.js index 6061bdd..4bc3207 100644 --- a/src/router/user.js +++ b/src/router/user.js @@ -1,6 +1,7 @@ const status = require("../util/statuses"); const bcrypt = require('bcrypt'); const joi = require("joi"); +const { ObjectId } = require('mongodb'); const salt = 12; module.exports = (middleware, users, plans) => { @@ -40,7 +41,48 @@ module.exports = (middleware, users, plans) => { } }); + router.get('/plans/:id', async (req, res) => { + if (!req.session.email) { + return res.status(status.Unauthorized).redirect('/login'); + } + + try { + const planId = req.params.id; + + + if (!ObjectId.isValid(planId)) { + req.session.errMessage = "Invalid plan ID format."; + return res.status(status.BadRequest).redirect('/plans'); + } + + const plan = await plans.findOne({ userEmail: req.user.email, _id: new ObjectId(planId) }); + + if (!plan) { + console.log(`Plan not found with ID: ${planId} for user: ${req.user.email}`); + req.session.errMessage = "Plan not found or you do not have permission to view it."; + return res.status(status.NotFound).redirect('/plans'); + } + // console.log("Found plan:", plan); + res.render('planDetail', { + user: req.user, + plan: plan + }); + + } catch (err) { + console.error("Error fetching plan:", err); + req.session.errMessage = "Could not load your plan. Please try again."; + res.status(status.InternalServerError).redirect('/home'); + } + }); + router.get('/newPlan', (req, res) => { + if (!req.session.email) { + return res.status(status.Unauthorized).redirect('/login'); + } + if(!req.user.financialData){ + req.session.errMessage = "Please complete your financial data before creating a plan."; + return res.status(status.Unauthorized).redirect('/questionnaire'); + } const errMessage = req.session.errMessage; req.session.errMessage = ""; res.render('newPlan', { user: req.user, errMessage: errMessage }); diff --git a/src/views/dashboard.ejs b/src/views/dashboard.ejs index 3de6635..e4c9b36 100644 --- a/src/views/dashboard.ejs +++ b/src/views/dashboard.ejs @@ -2,14 +2,15 @@ <%- include("./partials/header") %>
+

Welcome: <%= user.name %>

diff --git a/src/views/newPlan.ejs b/src/views/newPlan.ejs index 40b409b..a05dd1a 100644 --- a/src/views/newPlan.ejs +++ b/src/views/newPlan.ejs @@ -2,9 +2,9 @@ <%- include("./partials/header") %>
-

Welcome: <%= user.email %>

+

Welcome: <%= user.name %>

+ +<%- include("./partials/navBar") %> +<%- include("./partials/footer") %> diff --git a/src/views/plans.ejs b/src/views/plans.ejs index 10a6ca1..ce7ca80 100644 --- a/src/views/plans.ejs +++ b/src/views/plans.ejs @@ -2,13 +2,13 @@ <%- include("./partials/header") %>
-

Welcome: <%= user.email %>

+

Welcome: <%= user.name %>