forked from iliakan/course-js-backend
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
75 lines (64 loc) · 2.27 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
const Koa = require('koa');
const config = require('./config');
const Router = require('@koa/router');
/*
const {recommendationsList} = require('./controllers/recommendations');
const {
productsBySubcategory, productsByQuery, productList, productBySlug
} = require('./controllers/products');
const {categoryList} = require('./controllers/categories');
const {login} = require('./controllers/login');
const {oauth, oauthCallback} = require('./controllers/oauth');
const {me} = require('./controllers/me');
const {register, confirm} = require('./controllers/registration');
const {checkout, getOrdersList} = require('./controllers/orders');
const {messageList} = require('./controllers/messages');
*/
const app = new Koa();
app.db = require('./libs/db');
app.log = require('./libs/log')();
app.use(require('koa-static')(config.publicRoot));
require('./handlers/requestId')(app);
require('./handlers/requestLog')(app);
require('./handlers/nocache')(app);
require('./handlers/error')(app);
// uncomment to enable CORS from anywhere
// app.use(require('@koa/cors')({maxAge: 86400}));
const router = new Router({prefix: '/api'});
router.get('/stats/:field(orders|sales|customers)', async (ctx) => {
let orders = app.db.get('orders');
if (ctx.query.gte) {
orders = orders.filter(order => order.createdAt >= new Date(ctx.query.gte));
}
if (ctx.query.lte) {
orders = orders.filter(order => order.createdAt <= new Date(ctx.query.lte));
}
let ordersCountByDate = Object.create(null);
let customersSet = new Set();
for(let order of orders) {
// console.log(order);
let dateStr = order.createdAt.toISOString().replace(/T.*/, '');
if (!ordersCountByDate[dateStr]) ordersCountByDate[dateStr] = 0;
switch(ctx.params.field) {
case 'orders':
ordersCountByDate[dateStr]++;
break;
case 'sales':
ordersCountByDate[dateStr] += order.amount;
break;
case 'customers':
if (!customersSet.has(order.phone)) {
customersSet.add(order.phone);
ordersCountByDate[dateStr]++;
}
break;
default:
throw new Error("Must never happen");
}
}
console.log(ordersCountByDate);
ctx.body = ordersCountByDate;
});
app.use(router.routes());
require('./handlers/jsonServer')(app);
module.exports = app;