diff --git a/.gitignore b/.gitignore index 3f8e1d990..22bbbe69c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules -.vscode/* \ No newline at end of file +.vscode/* +.env \ No newline at end of file diff --git a/config/.env b/config/.env index dbe126e0a..1e982be57 100644 --- a/config/.env +++ b/config/.env @@ -1,2 +1,2 @@ PORT = 2121 -DB_STRING = mongodb+srv://demo:demo@cluster0.hcds1.mongodb.net/todos?retryWrites=true&w=majority \ No newline at end of file +DB_STRING = mongodb+srv://zinger:ZyEvLFkPOSp38dI4@cluster0.f3yakar.mongodb.net/ToDoTasks-Demo?retryWrites=true&w=majority \ No newline at end of file diff --git a/controllers/auth.js b/controllers/auth.js index c434c3c3a..3af91c2fa 100644 --- a/controllers/auth.js +++ b/controllers/auth.js @@ -2,9 +2,9 @@ const passport = require('passport') const validator = require('validator') const User = require('../models/User') - exports.getLogin = (req, res) => { +exports.getLogin = (req, res) => { if (req.user) { - return res.redirect('/todos') + return res.redirect('/diary') } res.render('login', { title: 'Login' @@ -31,7 +31,7 @@ const User = require('../models/User') req.logIn(user, (err) => { if (err) { return next(err) } req.flash('success', { msg: 'Success! You are logged in.' }) - res.redirect(req.session.returnTo || '/todos') + res.redirect(req.session.returnTo || '/diary') }) })(req, res, next) } @@ -49,7 +49,7 @@ const User = require('../models/User') exports.getSignup = (req, res) => { if (req.user) { - return res.redirect('/todos') + return res.redirect('/diary') } res.render('signup', { title: 'Create Account' @@ -89,7 +89,7 @@ const User = require('../models/User') if (err) { return next(err) } - res.redirect('/todos') + res.redirect('/diary') }) }) }) diff --git a/controllers/diary.js b/controllers/diary.js new file mode 100644 index 000000000..e43f501e7 --- /dev/null +++ b/controllers/diary.js @@ -0,0 +1,42 @@ +const Diary = require('../models/Diary') + +module.exports = { + getDiary: async (req,res)=>{ + console.log(req.user) + try{ + const diaryEntries = await Diary.find({userId:req.user.id}) //find the Diary in database with matching from models + const totalEntries = await Diary.countDocuments({userId:req.user.id}) + res.render('diary.ejs', {diary: diaryEntries, total: totalEntries, user: req.user}) + }catch(err){ + console.log(err) + } + }, + createDiary: async (req, res)=>{ + try{ + await Diary.create({diary: req.body.diaryEntry, userId: req.user.id, private: req.body.private}) + console.log(req.body) + res.redirect('/diary') + }catch(err){ + console.log(err) + } + }, + changePrivacy: async (req, res)=>{ + try{ + await Diary.findOneAndUpdate({_id:req.body.diaryIdFromJSFile},{private: req.body.private}) + console.log('Updated Diary') + res.json('Updated Diary') + }catch(err){ + console.log(err) + } + }, + deleteDiary: async (req, res)=>{ + console.log(req.body.diaryIdFromJSFile) + try{ + await Diary.findOneAndDelete({_id:req.body.diaryIdFromJSFile}) + console.log('Deleted Diary') + res.json('Deleted It') + }catch(err){ + console.log(err) + } + } +} \ No newline at end of file diff --git a/controllers/todos.js b/controllers/todos.js deleted file mode 100644 index b10950f93..000000000 --- a/controllers/todos.js +++ /dev/null @@ -1,55 +0,0 @@ -const Todo = require('../models/Todo') - -module.exports = { - getTodos: async (req,res)=>{ - console.log(req.user) - try{ - const todoItems = await Todo.find({userId:req.user.id}) - const itemsLeft = await Todo.countDocuments({userId:req.user.id,completed: false}) - res.render('todos.ejs', {todos: todoItems, left: itemsLeft, user: req.user}) - }catch(err){ - console.log(err) - } - }, - createTodo: async (req, res)=>{ - try{ - await Todo.create({todo: req.body.todoItem, completed: false, userId: req.user.id}) - console.log('Todo has been added!') - res.redirect('/todos') - }catch(err){ - console.log(err) - } - }, - markComplete: async (req, res)=>{ - try{ - await Todo.findOneAndUpdate({_id:req.body.todoIdFromJSFile},{ - completed: true - }) - console.log('Marked Complete') - res.json('Marked Complete') - }catch(err){ - console.log(err) - } - }, - markIncomplete: async (req, res)=>{ - try{ - await Todo.findOneAndUpdate({_id:req.body.todoIdFromJSFile},{ - completed: false - }) - console.log('Marked Incomplete') - res.json('Marked Incomplete') - }catch(err){ - console.log(err) - } - }, - deleteTodo: async (req, res)=>{ - console.log(req.body.todoIdFromJSFile) - try{ - await Todo.findOneAndDelete({_id:req.body.todoIdFromJSFile}) - console.log('Deleted Todo') - res.json('Deleted It') - }catch(err){ - console.log(err) - } - } -} \ No newline at end of file diff --git a/models/Todo.js b/models/Diary.js similarity index 53% rename from models/Todo.js rename to models/Diary.js index 8698f6900..70b5b1eeb 100644 --- a/models/Todo.js +++ b/models/Diary.js @@ -1,18 +1,18 @@ const mongoose = require('mongoose') -const TodoSchema = new mongoose.Schema({ - todo: { +const DiarySchema = new mongoose.Schema({ + diary: { type: String, required: true, }, - completed: { - type: Boolean, - required: true, - }, userId: { type: String, required: true + }, + private: { + type: Boolean, + required: true } }) -module.exports = mongoose.model('Todo', TodoSchema) +module.exports = mongoose.model('Diary', DiarySchema) diff --git a/public/js/main.js b/public/js/main.js index b4cfee075..4eb0488bb 100644 --- a/public/js/main.js +++ b/public/js/main.js @@ -1,45 +1,23 @@ const deleteBtn = document.querySelectorAll('.del') -const todoItem = document.querySelectorAll('span.not') -const todoComplete = document.querySelectorAll('span.completed') +const changePrivacyBtn = document.querySelectorAll('.changePrivacy') Array.from(deleteBtn).forEach((el)=>{ - el.addEventListener('click', deleteTodo) + el.addEventListener('click', deleteDiary) }) -Array.from(todoItem).forEach((el)=>{ - el.addEventListener('click', markComplete) +Array.from(changePrivacyBtn).forEach((el)=>{ + el.addEventListener('click', changePrivacy) }) -Array.from(todoComplete).forEach((el)=>{ - el.addEventListener('click', markIncomplete) -}) -async function deleteTodo(){ - const todoId = this.parentNode.dataset.id +async function deleteDiary(){ + const diaryId = this.parentNode.dataset.id try{ - const response = await fetch('todos/deleteTodo', { + const response = await fetch('diary/deleteDiary', { method: 'delete', headers: {'Content-type': 'application/json'}, body: JSON.stringify({ - 'todoIdFromJSFile': todoId - }) - }) - const data = await response.json() - console.log(data) - location.reload() - }catch(err){ - console.log(err) - } -} - -async function markComplete(){ - const todoId = this.parentNode.dataset.id - try{ - const response = await fetch('todos/markComplete', { - method: 'put', - headers: {'Content-type': 'application/json'}, - body: JSON.stringify({ - 'todoIdFromJSFile': todoId + 'diaryIdFromJSFile': diaryId }) }) const data = await response.json() @@ -50,14 +28,16 @@ async function markComplete(){ } } -async function markIncomplete(){ - const todoId = this.parentNode.dataset.id +async function changePrivacy(){ + const diaryId = this.parentNode.dataset.id + const private = this.parentNode.dataset.private === "true" try{ - const response = await fetch('todos/markIncomplete', { + const response = await fetch('diary/changePrivacy', { method: 'put', headers: {'Content-type': 'application/json'}, body: JSON.stringify({ - 'todoIdFromJSFile': todoId + 'diaryIdFromJSFile': diaryId, + 'private': !private, }) }) const data = await response.json() diff --git a/routes/diary.js b/routes/diary.js new file mode 100644 index 000000000..1915ade50 --- /dev/null +++ b/routes/diary.js @@ -0,0 +1,14 @@ +const express = require('express') +const router = express.Router() +const diaryController = require('../controllers/diary') +const { ensureAuth } = require('../middleware/auth') + +router.get('/', ensureAuth, diaryController.getDiary) + +router.post('/createDiary', diaryController.createDiary) + +router.put('/changePrivacy', diaryController.changePrivacy) + +router.delete('/deleteDiary', diaryController.deleteDiary) + +module.exports = router \ No newline at end of file diff --git a/routes/todos.js b/routes/todos.js deleted file mode 100644 index 03dcf42e4..000000000 --- a/routes/todos.js +++ /dev/null @@ -1,16 +0,0 @@ -const express = require('express') -const router = express.Router() -const todosController = require('../controllers/todos') -const { ensureAuth } = require('../middleware/auth') - -router.get('/', ensureAuth, todosController.getTodos) - -router.post('/createTodo', todosController.createTodo) - -router.put('/markComplete', todosController.markComplete) - -router.put('/markIncomplete', todosController.markIncomplete) - -router.delete('/deleteTodo', todosController.deleteTodo) - -module.exports = router \ No newline at end of file diff --git a/server.js b/server.js index b031c4cad..4482be066 100644 --- a/server.js +++ b/server.js @@ -8,7 +8,7 @@ const flash = require('express-flash') const logger = require('morgan') const connectDB = require('./config/database') const mainRoutes = require('./routes/main') -const todoRoutes = require('./routes/todos') +const diaryRoutes = require('./routes/diary') require('dotenv').config({path: './config/.env'}) @@ -39,8 +39,8 @@ app.use(passport.session()) app.use(flash()) app.use('/', mainRoutes) -app.use('/todos', todoRoutes) - +app.use('/diary', diaryRoutes) + app.listen(process.env.PORT, ()=>{ console.log('Server is running, you better catch it!') -}) \ No newline at end of file +}) \ No newline at end of file diff --git a/views/diary.ejs b/views/diary.ejs new file mode 100644 index 000000000..f99fd7494 --- /dev/null +++ b/views/diary.ejs @@ -0,0 +1,46 @@ + + +
+ + + +This entry is <%= el.private ? 'Private ' : 'Public ' %>
+ + +