Skip to content

Commit 20ea21d

Browse files
committed
Courses | Delete Course added
1 parent 2f377e9 commit 20ea21d

File tree

6 files changed

+119
-19
lines changed

6 files changed

+119
-19
lines changed

app.js

+7
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ const mongoose = require('mongoose');
44
const session = require('express-session');
55
const MongoStore = require('connect-mongo');
66
const flash = require('connect-flash');
7+
const methodOverride = require('method-override');
78

89
const pageRoute = require('./routes/pageRoute');
910
const courseRoute = require('./routes/courseRoute');
@@ -37,6 +38,12 @@ app.use((req, res, next) => {
3738
res.locals.flashMessages = req.flash();
3839
next();
3940
})
41+
app.use(
42+
methodOverride('_method', {
43+
methods: ['POST', 'GET'],
44+
})
45+
);
46+
4047

4148
// Logger
4249
app.use((req, res, next) => {

controllers/courseController.js

+23
Original file line numberDiff line numberDiff line change
@@ -107,3 +107,26 @@ exports.releaseCourse = async (req, res) => {
107107
});
108108
}
109109
};
110+
111+
exports.deleteCourse = async (req, res) => {
112+
try {
113+
const course = await Course.findOneAndRemove({ slug: req.params.slug });
114+
if(!course) return res.status(404).json({ status: 'fail', message: 'Course not found.' });
115+
if(req.session.userID !== course.creator.toString()) return res.status(401).json({ status: 'fail', message: 'Unauthorized.' });
116+
req.flash('success', `${course.name} deleted successfully.`);
117+
118+
// Very dubious way of removing course from users' courses array
119+
const users = await User.find();
120+
users.forEach(async (user) => {
121+
await user.courses.pull({ _id: course._id });
122+
await user.save();
123+
});
124+
125+
res.status(200).redirect('/users/dashboard');
126+
} catch (error) {
127+
res.status(400).json({
128+
status: 'fail',
129+
error,
130+
});
131+
}
132+
};

package-lock.json

+69-15
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
"ejs": "^3.1.8",
2525
"express": "^4.18.1",
2626
"express-session": "^1.17.3",
27-
"express-validator": "^6.14.2",
27+
"express-validator": "^6.15.0",
28+
"method-override": "^3.0.0",
2829
"mongoose": "^6.5.4",
2930
"nodemailer": "^6.7.8",
3031
"slugify": "^1.6.5"

routes/courseRoute.js

+3
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,7 @@ router.route('/enroll')
1717
router.route('/release')
1818
.post(courseController.releaseCourse);
1919

20+
router.route('/:slug')
21+
.delete(courseController.deleteCourse)
22+
2023
module.exports = router;

views/dashboard.ejs

+15-3
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,13 @@
2222
</div>
2323
<% } %>
2424

25-
<div class="col-lg-12 blog-post-single">
25+
<!--<div class="col-lg-12 blog-post-single">
2626
<div class="blog-author">
2727
<div class="author-bio">
2828
<h3 class="author_name"><a href="#"><%= user.name %></a></h3>
2929
</div>
3030
</div>
31-
32-
</div><!-- end col -->
31+
</div> -->
3332
</div><!-- end row -->
3433
<h2 class="text-center"><b>Courses</b></h2>
3534
<div class="row mt-5">
@@ -47,6 +46,19 @@
4746
<div class="course-desc">
4847
<p><%= courses[i].description %></p>
4948
</div>
49+
<div class="clearfix">
50+
<ul style="list-style-type: none;">
51+
<li style="float: left;">
52+
<button class="btn btn-primary rounded-0 text-white"><span>UPDATE</span></button>
53+
</li>
54+
<li style="float: right;">
55+
<a href="/courses/<%= courses[i].slug %>?_method=DELETE"
56+
onclick="return confirm('Are you sure you want to delete this course?')"
57+
class="btn btn-danger rounded-0 text-white"><span>DELETE</span></a>
58+
</li>
59+
</ul>
60+
</div>
61+
5062
</div>
5163
</div>
5264
</div><!-- end col -->

0 commit comments

Comments
 (0)