File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -2,9 +2,34 @@ import express from 'express';
22import expressAsyncHandler from 'express-async-handler' ;
33import { isAuth , isAdmin } from '../utils' ;
44import Order from '../models/orderModel' ;
5+ import User from '../models/userModel' ;
56
67const 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+ ) ;
833orderRouter . get (
934 '/' ,
1035 isAuth ,
@@ -104,4 +129,5 @@ orderRouter.put(
104129 }
105130 } )
106131) ;
132+
107133export default orderRouter ;
Original file line number Diff line number Diff 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+ } ;
Original file line number Diff line number Diff line change 11import DashboardMenu from '../components/DashboardMenu' ;
2+ import { getSummary } from '../api' ;
23
4+ let summary = { } ;
35const 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 ` ;
Original file line number Diff line number Diff 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+ }
You can’t perform that action at this time.
0 commit comments