-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.js
161 lines (135 loc) · 4.76 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
const express = require('express');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const _ = require('lodash');
// const date = require(__dirname + '/date.js');
const app = express();
app.use(bodyParser.urlencoded({
extended: true
}));
//To include CSS file
app.use(express.static('public'));
//To render EJS files
app.set('view engine', 'ejs');
//Heroku Deployment
let port = process.env.PORT;
if (port == null || port == ""){
port = 3000;
}
//Listen to Port
app.listen(port, function () {
console.log('Server has started successfully');
});
//Connect the mongoose with MongoDB
mongoose.connect('mongodb+srv://admin-suriya_prasath:prasath123@cluster0-gssbu.mongodb.net/todoListDB', {
useNewUrlParser: true,
useUnifiedTopology: true
});
//Create a itemsSchema and listSchema[for generating list for dynamically changing routes]
const itemsSchema = mongoose.Schema({
name: String,
});
const listSchema = mongoose.Schema({
name: String,
listItems: [itemsSchema]
});
//Creating a mongoose model [always capitalized], which includes the collection's name and schema
const Item = mongoose.model('Item', itemsSchema);
const List = mongoose.model('List', listSchema);
//Creating the documents for the relevant DB
const item1 = new Item({
name: 'HAVE A WONDERFUL DAY!'
});
//Saving the above items to an Array
const defaultItems = [item1];
const defaultListItems = [];
//Main Route Configuration----------------------------------
app.get('/', function (req, res) {
//Find the items from the DB
Item.find({}, function (err, foundItems) {
if (err) {
console.log('Error in retriving the data');
} else if (foundItems.length === 0) {
//Inserting defaultItems to the DB
Item.insertMany(defaultItems, function (err) {
if (!err) {
console.log('Data entered successfully');
}
//After inserting the data to the DB, we get redirected to the / route
res.redirect('/');
});
} else {
//Rendering the EJS files and dynamically changing the Marker
res.render('list', {
ListTitle: 'Today',
ListItems: foundItems
})
}
});
});
//Express provides a methos by which we can get access to our DYNAMIC ROUTES using EXPRESS ROUTE PARAMETERS
app.get('/:customListName', function (req, res) {
const customListName = _.capitalize(req.params.customListName);
//Before creating a new list document, we must check if it is already existing or not, hence for that we need to use findOne() method
List.findOne({name: customListName}, function (err, foundList) {
if (!err) {
if (!foundList) {
//Creating new list document
const list = new List({
name: customListName,
listItems: defaultListItems
});
list.save();
res.redirect('/' + customListName);
} else {
res.render('list', {
ListTitle: foundList.name,
ListItems: foundList.listItems
})
}
}
});
});
//Posting the contents to the / route---------------------------
app.post('/', function (req, res) {
let itemName = req.body.list;
let listName = req.body.button;
const item = new Item({
name: itemName
});
if (listName !== 'Today') {
List.findOne({name: listName}, function (err, foundList) {
if (!err) {
foundList.listItems.push(item);
foundList.save();
res.redirect('/' + listName);
}
});
} else {
//Straight Forward Way
item.save();
res.redirect('/');
}
});
//Configuring the /delete route-----------------------------------
app.post('/delete', function (req, res) {
//Storing the item's id to a Variable
let CheckeditemId = req.body.checkbox;
let listName = req.body.hiddenInput;
if (listName !== 'Today') {
List.findOneAndUpdate({name:listName}, {$pull: {listItems: {_id:CheckeditemId}}}, function(err, foundList){
if(!err){
res.redirect('/' + listName);
}
});
} else {
//Deleting the Id by calling findByIdAndDelete method
Item.findByIdAndDelete(CheckeditemId, function (err) {
if (!err) {
console.log('Item deleted successfully');
}
});
//Redirecting to the / route
res.redirect('/');
}
});