Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 95 additions & 0 deletions controllers/tasks.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
const Task = require('../models/Task');

const addTask = (req, res) => {
res.render('pages/addTask');
};

const createTask = async (req, res) => {
try {
if (req.body.complete) {
req.body.completed = true;
}
await Task.create(req.body);
req.session.pendingMessage = 'The task was created.';
res.redirect('/tasks');
} catch (err) {
if (err.name === 'ValidationError') {
res.locals.message = Object.values(err.errors)
.map((item) => item.message)
.join(', ');
} else {
res.locals.message = 'Something went wrong.';
}
res.render('pages/addTask');
}
};

const deleteTask = async (req, res) => {
try {
// const task = await Task.findById(req.params.id);
await Task.findByIdAndDelete(req.params.id);
req.session.pendingMessage = 'The task was deleted.';
res.redirect('/tasks');
} catch (err) {
req.session.pendingMessage = 'Something went wrong.';
res.redirect('/tasks');
}
};

const editTask = async (req, res) => {
try {
const task = await Task.findById(req.params.id);
res.render('pages/editTask', { task });
} catch (err) {
req.session.pendingMessage = 'Something went wrong.';
res.redirect('/tasks');
}
};

const updateTask = async (req, res) => {
let task = false;
try {
if (req.body.complete) {
req.body.completed = true;
}
task = await Task.findById(req.params.id);
await Task.findByIdAndUpdate(req.params.id, req.body, {
runValidators: true,
});
req.session.pendingMessage = 'The task was updated.';
res.redirect('/tasks');
} catch (err) {
if (err.name === 'ValidationError') {
res.locals.message = Object.values(err.errors)
.map((item) => item.message)
.join(', ');
} else {
res.locals.message = 'Something went wrong.';
}
if (task) {
res.render('pages/editTask', { task });
} else {
req.session.pendingMessage = 'Something went wrong.';
res.redirect('/tasks');
}
}
};

const getTasks = async (req, res) => {
try {
const tasks = await Task.find();
res.render('pages/tasks', { tasks });
} catch (err) {
res.locals.message = 'Something went wrong.';
res.render('pages/tasks', { tasks: [] });
}
};

module.exports = {
addTask,
createTask,
deleteTask,
updateTask,
editTask,
getTasks,
};
7 changes: 7 additions & 0 deletions db/connect.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
const mongoose = require('mongoose');

const connectDB = (url) => {
return mongoose.connect(url);
};

module.exports = connectDB;
11 changes: 11 additions & 0 deletions middleware/message.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
const setMessage = (req, res, next) => {
if (req.session.pendingMessage) {
res.locals.message = req.session.pendingMessage;
} else {
res.locals.message = '';
}
req.session.pendingMessage = '';
next();
};

module.exports = setMessage;
16 changes: 16 additions & 0 deletions models/Task.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
const mongoose = require('mongoose');

const TaskSchema = new mongoose.Schema({
name: {
type: String,
required: [true, 'must provide name'],
trim: true,
maxlength: [20, 'name can not be more than 20 characters'],
},
completed: {
type: Boolean,
default: false,
},
});

module.exports = mongoose.model('Task', TaskSchema);
Loading