Skip to content

Commit 4423080

Browse files
authored
Video-42-Dashboard-Summary (#42)
1 parent 3d66fcf commit 4423080

4 files changed

Lines changed: 104 additions & 5 deletions

File tree

backend/routers/orderRouter.js

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,34 @@ import express from 'express';
22
import expressAsyncHandler from 'express-async-handler';
33
import { isAuth, isAdmin } from '../utils';
44
import Order from '../models/orderModel';
5+
import User from '../models/userModel';
56

67
const orderRouter = express.Router();
7-
8+
orderRouter.get(
9+
'/summary',
10+
isAuth,
11+
isAdmin,
12+
expressAsyncHandler(async (req, res) => {
13+
const orders = await Order.aggregate([
14+
{
15+
$group: {
16+
_id: null,
17+
numOrders: { $sum: 1 },
18+
totalSales: { $sum: '$totalPrice' },
19+
},
20+
},
21+
]);
22+
const users = await User.aggregate([
23+
{
24+
$group: {
25+
_id: null,
26+
numUsers: { $sum: 1 },
27+
},
28+
},
29+
]);
30+
res.send({ users, orders });
31+
})
32+
);
833
orderRouter.get(
934
'/',
1035
isAuth,
@@ -104,4 +129,5 @@ orderRouter.put(
104129
}
105130
})
106131
);
132+
107133
export default orderRouter;

frontend/src/api.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,3 +339,22 @@ export const deliverOrder = async (orderId) => {
339339
return { error: err.response ? err.response.data.message : err.message };
340340
}
341341
};
342+
export const getSummary = async () => {
343+
try {
344+
const { token } = getUserInfo();
345+
const response = await axios({
346+
url: `${apiUrl}/api/orders/summary`,
347+
headers: {
348+
Authorization: `Bearer ${token}`,
349+
'content-type': 'application/json',
350+
},
351+
});
352+
if (response.statusText !== 'OK') {
353+
throw new Error(response.data.message);
354+
} else {
355+
return response.data;
356+
}
357+
} catch (err) {
358+
return { error: err.response ? err.response.data.message : err.message };
359+
}
360+
};

frontend/src/srceens/DashboardScreen.js

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,37 @@
11
import DashboardMenu from '../components/DashboardMenu';
2+
import { getSummary } from '../api';
23

4+
let summary = {};
35
const DashboardScreen = {
46
after_render: () => {},
5-
render: () => {
7+
render: async () => {
8+
summary = await getSummary();
69
return `
710
<div class="dashboard">
811
${DashboardMenu.render({ selected: 'dashboard' })}
912
<div class="dashboard-content">
1013
<h1>Dashboard</h1>
11-
<div>
12-
Info and Charts will be added here
13-
</div>
14+
15+
<ul class="summary-items">
16+
<li>
17+
<div class="summary-title color1">
18+
<span><i class="fa fa-users"></i> Users</span>
19+
</div>
20+
<div class="summary-body">${summary.users[0].numUsers}</div>
21+
</li>
22+
<li>
23+
<div class="summary-title color2">
24+
<span><i class="fa fa-users"></i> Orders</span>
25+
</div>
26+
<div class="summary-body">${summary.orders[0].numOrders}</div>
27+
</li>
28+
<li>
29+
<div class="summary-title color3">
30+
<span><i class="fa fa-users"></i> Sales</span>
31+
</div>
32+
<div class="summary-body">$${summary.orders[0].totalSales}</div>
33+
</li>
34+
</ul>
1435
</div>
1536
</div>
1637
`;

frontend/style.css

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,3 +416,36 @@ td {
416416
.tr-action {
417417
width: 10rem;
418418
}
419+
.summary-items {
420+
display: flex;
421+
justify-content: space-around;
422+
list-style-type: none;
423+
flex-wrap: wrap;
424+
padding: 0;
425+
margin: 0;
426+
}
427+
.summary-items > li {
428+
border: 0.1rem #c0c0c0 solid;
429+
margin: 2rem;
430+
border-radius: 0.5rem;
431+
flex: 1 1 20rem;
432+
}
433+
.summary-title {
434+
background-color: #e0e0e0;
435+
font-size: 2rem;
436+
padding: 1rem;
437+
}
438+
.summary-body {
439+
font-size: 4rem;
440+
padding: 1rem;
441+
text-align: center;
442+
}
443+
.summary-title.color1 {
444+
background-color: #f0e0e0;
445+
}
446+
.summary-title.color2 {
447+
background-color: #e0f0e0;
448+
}
449+
.summary-title.color3 {
450+
background-color: #e0e0f0;
451+
}

0 commit comments

Comments
 (0)