Skip to content

Commit dbb4fd9

Browse files
committed
feat: Added blog module, api and controller
1 parent 9d0a502 commit dbb4fd9

File tree

6 files changed

+248
-3
lines changed

6 files changed

+248
-3
lines changed

src/blog/blog.controller.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
const httpStatus = require('http-status');
2+
const blog = require('./blog.helper');
3+
const { handleCatch } = require('../utils/common');
4+
5+
function search(req, res) {
6+
blog.getBlogBySearch(req.body)
7+
.then(blogs => {
8+
return res.send(blogs);
9+
})
10+
.catch(error => handleCatch(error, res));
11+
}
12+
13+
function get(req, res) {
14+
blog.getAllBlogs()
15+
.then(blogs => {
16+
return res.send(blogs);
17+
})
18+
.catch(error => handleCatch(error, res));
19+
}
20+
21+
function add(req, res) {
22+
blog.addBlog(req.body)
23+
.then(blog => {
24+
return res.send(blog);
25+
})
26+
.catch(error => handleCatch(error, res));
27+
}
28+
29+
function update(req, res) {
30+
blog.updateBlog(req.body, req.params.id)
31+
.then(blog => {
32+
return res.send(blog);
33+
})
34+
.catch(error => handleCatch(error, res));
35+
}
36+
37+
function remove(req, res) {
38+
blog.removeBlog(req.params.id)
39+
.then(blog => {
40+
return res.send(blog);
41+
})
42+
.catch(error => {
43+
return res.status(httpStatus.INTERNAL_SERVER_ERROR).send(error);
44+
});
45+
}
46+
47+
module.exports = {
48+
search,
49+
get,
50+
add,
51+
update,
52+
remove,
53+
};

src/blog/blog.helper.js

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
const blog = require('./blog.model');
2+
3+
/**
4+
* Get all active blogs
5+
* @return {blogs} - return all blogs
6+
* @return {err} - return error
7+
*/
8+
let getBlogBySearch = (params) => {
9+
return blog
10+
.search(params)
11+
.then((blogs) => Promise.resolve(blogs))
12+
.catch((err) => Promise.reject(err));
13+
};
14+
15+
/**
16+
* Get all active blogs
17+
* @return {blogs} - return all blogs
18+
* @return {err} - return error
19+
*/
20+
let getAllBlogs = () => {
21+
return blog
22+
.find({})
23+
.sort({title: 1})
24+
.exec()
25+
.then((blogs) => Promise.resolve(blogs))
26+
.catch((err) => Promise.reject(err));
27+
};
28+
29+
/**
30+
* Get blog by Id
31+
* @param {ObjectId} id - blog id
32+
* @return {blog} - return blog
33+
* @return {err} - return error
34+
*/
35+
let getBlogById = (id) => {
36+
return blog
37+
.findById(id)
38+
.exec()
39+
.then((blog) => Promise.resolve(blog))
40+
.catch((err) => Promise.reject(err));
41+
};
42+
43+
/**
44+
* Get blog by title
45+
* @param {String} title - blog title
46+
* @return {blogs} - return blog
47+
* @return {err} - return error
48+
*/
49+
let getBlogByName = (title) => {
50+
return blog
51+
.findOne({
52+
title: new RegExp('^' + title + '$', "i")
53+
})
54+
.exec()
55+
.then((blog) => Promise.resolve(blog))
56+
.catch((err) => Promise.reject(err));
57+
};
58+
59+
/**
60+
* Add blog
61+
* @param {object} req - Request json object
62+
* @return {blog} - return blog
63+
* @return {err} - return error
64+
*/
65+
let addBlog = (req) => {
66+
let oBlog = new blog();
67+
oBlog.title = req.title;
68+
oBlog.content = req.content;
69+
70+
return oBlog.save()
71+
.then(blog => Promise.resolve(blog))
72+
.catch(err => Promise.reject(err));
73+
};
74+
75+
/**
76+
* Update blog
77+
* @param {object} req - Request json object
78+
* @return {blog} - return blog
79+
* @return {err} - return error
80+
*/
81+
let updateBlog = (req, id) => {
82+
return blog
83+
.findById(id)
84+
.exec()
85+
.then((oBlog) => {
86+
oBlog.title = req.title || oBlog.title;
87+
oBlog.content = req.content || oBlog.content;
88+
return oBlog.save()
89+
.then(updatedBlog => Promise.resolve(updatedBlog))
90+
.catch(err => Promise.reject(err));
91+
})
92+
.catch(err => Promise.reject(err));
93+
};
94+
95+
/**
96+
* Remove blog by Id
97+
* @param {ObjectId} id - blog id
98+
* @return {blog} - return blog
99+
* @return {err} - return error
100+
*/
101+
let removeBlog = (id) => {
102+
return blog
103+
.findById(id)
104+
.exec()
105+
.then((oBlog) => {
106+
return oBlog
107+
.remove()
108+
.then((rBlog) => Promise.resolve(rBlog))
109+
.catch(err => Promise.reject(err));
110+
})
111+
.catch(err => Promise.reject(err));
112+
};
113+
114+
module.exports = {
115+
getAllBlogs,
116+
getBlogById,
117+
getBlogByName,
118+
addBlog,
119+
updateBlog,
120+
removeBlog,
121+
getBlogBySearch
122+
};

src/blog/blog.model.js

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
const mongoose = require('mongoose');
2+
3+
// define the schema for our blog
4+
const blogSchema = mongoose.Schema({
5+
title: {
6+
type: String,
7+
required: true,
8+
unique: true
9+
},
10+
content: {
11+
type: String
12+
}
13+
}, {
14+
timestamps: true
15+
});
16+
17+
blogSchema.statics = {
18+
search(params) {
19+
//count documents https://stackoverflow.com/questions/43925662/mongoose-pagination-from-server-side
20+
21+
return this.count({})
22+
.then((count) => {
23+
if (count === 0) {
24+
return Promise.reject({msg: 'No Document in Database..'});
25+
}
26+
return Promise.resolve(count);
27+
})
28+
.then((count) => {
29+
//get paginated documents
30+
return this.find().skip(params.pagination.start).limit(params.pagination.number).exec().then(function (docs) {
31+
if (!docs) {
32+
return Promise.reject({msg: 'No Document in Database..'});
33+
} else {
34+
const result = {
35+
totalRecords: count,
36+
numberOfPages: Math.ceil(count / params.pagination.number),
37+
data: docs
38+
};
39+
return Promise.resolve(result);
40+
}
41+
});
42+
})
43+
.catch((err) => Promise.reject(err));
44+
}
45+
};
46+
47+
// create the model for badgeCategory and expose it to our app
48+
module.exports = mongoose.model('Blog', blogSchema);

src/blog/blog.route.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/**
2+
* Created by KD
3+
*/
4+
const express = require('express');
5+
const router = express.Router();
6+
const blogController = require('./blog.controller');
7+
8+
router.route('/')
9+
.get(blogController.get)
10+
.post(blogController.add);
11+
12+
router.route('/:id')
13+
.put(blogController.update)
14+
.delete(blogController.remove);
15+
16+
router.route('/search')
17+
.post(blogController.search);
18+
19+
module.exports = router;

src/index.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ const expressJwt = require('express-jwt');
1010

1111
const server = require('http').Server(app);
1212

13+
// Logger
14+
app.use(morgan('combined'));
15+
1316
// MongoDB connection configuration
1417
mongoose.Promise = global.Promise;
1518
mongoose.connect(process.env.DB_URL, {useUnifiedTopology: true, useNewUrlParser: true}, (err, res) => {
@@ -25,9 +28,6 @@ app.set('port', process.env.PORT || 8000);
2528
// Allow cross origin
2629
app.use(cors());
2730

28-
// Logger
29-
app.use(morgan('combined'));
30-
3131
// Validate each call before route
3232
app.use('/', function (err, req, res, next) {
3333
next();

src/index.route.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ const express = require('express');
22
const router = express.Router();
33
const todo = require('./todo/todo.route');
44
const auth = require('./auth/auth.route');
5+
const blog = require('./blog/blog.route');
6+
57
/**
68
* Default route.
79
*/
@@ -11,5 +13,6 @@ router.get('/health-check', (req, res) => res.status(200).send({
1113

1214
router.use('/login', auth);
1315
router.use('/todo', todo);
16+
router.use('/blog', blog);
1417

1518
module.exports = router;

0 commit comments

Comments
 (0)