diff --git a/app.js b/app.js index 87b21d7..ff65caa 100644 --- a/app.js +++ b/app.js @@ -24,10 +24,16 @@ if (process.env.NODE_ENV === 'development') { app.use(morgan('dev')) } +// Handlebars Helpers +const { formatDate } = require('./helpers/hbs') + // Handlebars app.engine( '.hbs', exphbs({ + helpers: { + formatDate, + }, defaultLayout: 'main', extname: '.hbs', }) @@ -48,6 +54,12 @@ app.use( app.use(passport.initialize()) app.use(passport.session()) +// Set global var +app.use(function (req, res, next) { + res.locals.user = req.user || null + next() +}) + // Static folder app.use(express.static(path.join(__dirname, 'public'))) diff --git a/helpers/hbs.js b/helpers/hbs.js new file mode 100644 index 0000000..454212f --- /dev/null +++ b/helpers/hbs.js @@ -0,0 +1,7 @@ +const moment = require('moment') + +module.exports = { + formatDate: function (date, format) { + return moment(date).utc().format(format) + }, +} diff --git a/middleware/auth.js b/middleware/auth.js new file mode 100644 index 0000000..7a1f211 --- /dev/null +++ b/middleware/auth.js @@ -0,0 +1,16 @@ +module.exports = { + ensureAuth: function (req, res, next) { + if (req.isAuthenticated()) { + return next() + } else { + res.redirect('/') + } + }, + ensureGuest: function (req, res, next) { + if (req.isAuthenticated()) { + res.redirect('/dashboard') + } else { + return next() + } + }, +} diff --git a/models/Story.js b/models/Story.js new file mode 100644 index 0000000..167652e --- /dev/null +++ b/models/Story.js @@ -0,0 +1,28 @@ +const mongoose = require('mongoose') + +const StorySchema = new mongoose.Schema({ + title: { + type: String, + required: true, + trim: true, + }, + body: { + type: String, + required: true, + }, + status: { + type: String, + default: 'public', + enum: ['public', 'private'], + }, + user: { + type: mongoose.Schema.Types.ObjectId, + ref: 'User', + }, + createdAt: { + type: Date, + default: Date.now, + }, +}) + +module.exports = mongoose.model('Story', StorySchema) diff --git a/routes/index.js b/routes/index.js index a2d9b4a..645cc5d 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,9 +1,12 @@ const express = require('express') const router = express.Router() +const { ensureAuth, ensureGuest } = require('../middleware/auth') + +const Story = require('../models/Story') // @desc Login/Landing page // @route GET / -router.get('/', (req, res) => { +router.get('/', ensureGuest, (req, res) => { res.render('login', { layout: 'login', }) @@ -11,8 +14,17 @@ router.get('/', (req, res) => { // @desc Dashboard // @route GET /dashboard -router.get('/dashboard', (req, res) => { - res.render('dashboard') +router.get('/dashboard', ensureAuth, async (req, res) => { + try { + const stories = await Story.find({ user: req.user.id }).lean() + res.render('dashboard', { + name: req.user.firstName, + stories, + }) + } catch (err) { + console.error(err) + res.render('error/500') + } }) module.exports = router diff --git a/views/dashboard.hbs b/views/dashboard.hbs index 088dbda..83a5c98 100644 --- a/views/dashboard.hbs +++ b/views/dashboard.hbs @@ -1 +1,38 @@ -

Dashboard

\ No newline at end of file +
Dashboard
+

Welcome {{name}}

+

Here are your stories

+{{#if stories}} + + + + + + + + + + + {{#each stories}} + + + + + + + {{/each}} + +
TitleDateStatus
{{title}}{{formatDate createdAt 'MMMM Do YYYY, h:mm:ss a'}}{{status}} + + + + +
+ + +
+
+{{else}} +

You have not created any stories

+{{/if}} \ No newline at end of file