Skip to content

Commit 65a2ab7

Browse files
committed
Implimented the show all expense on the user dashboard and also imlimented delete functionality
1 parent 7a1e77d commit 65a2ab7

File tree

3 files changed

+133
-97
lines changed

3 files changed

+133
-97
lines changed

controllers/expense_controller.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,29 @@ module.exports.addExpense = async (req, res) => {
4141
};
4242
}
4343
};
44+
45+
exports.getAllExpenses = async (req, res) => {
46+
try {
47+
const expenses = await Expense.findAll(); //{ where: { userId: req.user.id } }
48+
res.json(expenses); // send the date where api call (This is is API or controller for get expense data)
49+
} catch (err) {
50+
console.log(err);
51+
}
52+
};
53+
54+
exports.deleteExpense = async (req, res) => {
55+
const id = req.params.id;
56+
try {
57+
// const expense = await Expense.findByPk(id);
58+
// await User.update(
59+
// {
60+
// totalExpenses: req.user.totalExpenses - expense.amount,
61+
// },
62+
// { where: { id: req.user.id } }
63+
// );
64+
await Expense.destroy({ where: { id: id } }); //,userId: req.user.id
65+
res.redirect("/user_dashboard");
66+
} catch (err) {
67+
console.log(err);
68+
}
69+
};

public/js/user_dashboard.js

Lines changed: 103 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -72,85 +72,86 @@ async function addExpense() {
7272
}
7373
}
7474

75-
// async function getAllExpenses() {
76-
// // e.preventDefault();
77-
// try {
78-
// const token = localStorage.getItem("token");
79-
// const res = await axios.get(
80-
// "http://localhost:3000/expense/getAllExpenses/1",
81-
// { headers: { Authorization: token } }
82-
// );
83-
// res.data.expenses.forEach((expenses) => {
84-
// const id = expenses.id;
85-
// const date = expenses.date;
86-
// const categoryValue = expenses.category;
87-
// const descriptionValue = expenses.description;
88-
// const amountValue = expenses.amount;
89-
90-
// let tr = document.createElement("tr");
91-
// tr.className = "trStyle";
92-
93-
// table.appendChild(tr);
94-
95-
// let idValue = document.createElement("th");
96-
// idValue.setAttribute("scope", "row");
97-
// idValue.setAttribute("style", "display: none");
98-
99-
// let th = document.createElement("th");
100-
// th.setAttribute("scope", "row");
101-
102-
// tr.appendChild(idValue);
103-
// tr.appendChild(th);
104-
105-
// idValue.appendChild(document.createTextNode(id));
106-
// th.appendChild(document.createTextNode(date));
107-
108-
// let td1 = document.createElement("td");
109-
// td1.appendChild(document.createTextNode(categoryValue));
110-
111-
// let td2 = document.createElement("td");
112-
// td2.appendChild(document.createTextNode(descriptionValue));
113-
114-
// let td3 = document.createElement("td");
115-
// td3.appendChild(document.createTextNode(amountValue));
116-
117-
// let td4 = document.createElement("td");
118-
119-
// let deleteBtn = document.createElement("button");
120-
// deleteBtn.className = "editDelete btn btn-danger delete";
121-
// deleteBtn.appendChild(document.createTextNode("Delete"));
122-
123-
// let editBtn = document.createElement("button");
124-
// editBtn.className = "editDelete btn btn-success edit";
125-
// editBtn.appendChild(document.createTextNode("Edit"));
126-
127-
// td4.appendChild(deleteBtn);
128-
// td4.appendChild(editBtn);
75+
// when page is load or reload
76+
document.addEventListener("DOMContentLoaded", getAllExpenses);
12977

130-
// tr.appendChild(td1);
131-
// tr.appendChild(td2);
132-
// tr.appendChild(td3);
133-
// tr.appendChild(td4);
134-
// });
78+
async function getAllExpenses() {
79+
// e.preventDefault();
80+
try {
81+
// const token = localStorage.getItem("token");
82+
const res = await axios.get(
83+
"http://localhost:9000/expense/getAllExpenses" // /1 ,
84+
// { headers: { Authorization: token } }
85+
);
86+
87+
res.data.forEach((expenses) => { //.expenses
88+
const id = expenses.id;
89+
const date = expenses.date;
90+
const categoryValue = expenses.category;
91+
const descriptionValue = expenses.description;
92+
const amountValue = expenses.amount;
93+
94+
let tr = document.createElement("tr");
95+
tr.className = "trStyle";
96+
table.appendChild(tr);
97+
98+
let idValue = document.createElement("th");
99+
idValue.setAttribute("scope", "row");
100+
idValue.setAttribute("style", "display: none"); //hidden
101+
idValue.appendChild(document.createTextNode(id));
102+
tr.appendChild(idValue);
103+
104+
let th = document.createElement("th");
105+
th.setAttribute("scope", "row");
106+
th.appendChild(document.createTextNode(date));
107+
tr.appendChild(th);
108+
109+
let td1 = document.createElement("td");
110+
td1.appendChild(document.createTextNode(categoryValue));
111+
112+
let td2 = document.createElement("td");
113+
td2.appendChild(document.createTextNode(descriptionValue));
114+
115+
let td3 = document.createElement("td");
116+
td3.appendChild(document.createTextNode(amountValue));
117+
118+
let td4 = document.createElement("td");
119+
120+
let deleteBtn = document.createElement("button");
121+
deleteBtn.className = "editDelete btn btn-danger delete";
122+
deleteBtn.appendChild(document.createTextNode("Delete"));
123+
124+
let editBtn = document.createElement("button");
125+
editBtn.className = "editDelete btn btn-success edit";
126+
editBtn.appendChild(document.createTextNode("Edit"));
127+
128+
td4.appendChild(deleteBtn);
129+
td4.appendChild(editBtn);
130+
131+
tr.appendChild(td1);
132+
tr.appendChild(td2);
133+
tr.appendChild(td3);
134+
tr.appendChild(td4);
135+
});
135136

136-
// // ---------------------------------------------------------------------//
137-
138-
// const ul = document.getElementById("paginationUL");
139-
// for (let i = 1; i <= res.data.totalPages; i++) {
140-
// const li = document.createElement("li");
141-
// const a = document.createElement("a");
142-
// li.setAttribute("class", "page-item");
143-
// a.setAttribute("class", "page-link");
144-
// a.setAttribute("href", "#");
145-
// a.appendChild(document.createTextNode(i));
146-
// li.appendChild(a);
147-
// ul.appendChild(li);
148-
// a.addEventListener("click", paginationBtn);
149-
// }
150-
// } catch {
151-
// (err) => console.log(err);
152-
// }
153-
// }
137+
// ---------------------------------------------------------------------//
138+
139+
// const ul = document.getElementById("paginationUL");
140+
// for (let i = 1; i <= res.data.totalPages; i++) {
141+
// const li = document.createElement("li");
142+
// const a = document.createElement("a");
143+
// li.setAttribute("class", "page-item");
144+
// a.setAttribute("class", "page-link");
145+
// a.setAttribute("href", "#");
146+
// a.appendChild(document.createTextNode(i));
147+
// li.appendChild(a);
148+
// ul.appendChild(li);
149+
// a.addEventListener("click", paginationBtn);
150+
// }
151+
} catch {
152+
(err) => console.log(err);
153+
}
154+
}
154155

155156
// async function paginationBtn(e) {
156157
// try {
@@ -220,22 +221,29 @@ async function addExpense() {
220221
// }
221222
// }
222223

223-
// async function deleteExpense(e) {
224-
// try {
225-
// const token = localStorage.getItem("token");
226-
// if (e.target.classList.contains("delete")) {
227-
// let tr = e.target.parentElement.parentElement;
228-
// let id = tr.children[0].textContent;
229-
// const res = await axios.get(
230-
// `http://localhost:3000/expense/deleteExpense/${id}`,
231-
// { headers: { Authorization: token } }
232-
// );
233-
// window.location.reload();
234-
// }
235-
// } catch {
236-
// (err) => console.log(err);
237-
// }
238-
// }
224+
table.addEventListener("click", (e) => {
225+
deleteExpense(e);
226+
});
227+
228+
async function deleteExpense(e) {
229+
try {
230+
// const token = localStorage.getItem("token");
231+
if (e.target.classList.contains("delete")) {
232+
let tr = e.target.parentElement.parentElement; //table row
233+
let id = tr.children[0].textContent;
234+
const res = await axios.get(
235+
`http://localhost:9000/expense/deleteExpense/${id}`
236+
// ,{ headers: { Authorization: token } }
237+
).then(() => {
238+
window.location.reload();
239+
}).catch((err) => {
240+
console.log(err);
241+
});
242+
}
243+
} catch {
244+
(err) => console.log(err);
245+
}
246+
}
239247

240248
// async function editExpense(e) {
241249
// try {
@@ -345,10 +353,8 @@ async function addExpense() {
345353
// buyPremiumBtn.addEventListener("click", buyPremium);
346354

347355
// document.addEventListener("DOMContentLoaded", isPremiumUser);
348-
// document.addEventListener("DOMContentLoaded", getAllExpenses);
349-
// table.addEventListener("click", (e) => {
350-
// deleteExpense(e);
351-
// });
356+
357+
352358
// table.addEventListener("click", (e) => {
353359
// editExpense(e);
354360
// });

router/expense.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,8 @@ const expenseController = require('../controllers/expense_controller');
55

66
router.post('/addExpense', expenseController.addExpense);
77

8+
router.get('/getAllExpenses', expenseController.getAllExpenses);
9+
10+
router.get('/deleteExpense/:id', expenseController.deleteExpense);
11+
812
module.exports = router;

0 commit comments

Comments
 (0)