Update bcryptjs to version 3.0.3 and add smoke-tracker router to the server configuration.
This commit is contained in:
59
server/routers/smoke-tracker/stats.js
Normal file
59
server/routers/smoke-tracker/stats.js
Normal file
@@ -0,0 +1,59 @@
|
||||
const { Router } = require('express')
|
||||
|
||||
const { getAnswer } = require('../../utils/common')
|
||||
const { CigaretteModel } = require('./model/cigarette')
|
||||
const { authMiddleware } = require('./middleware/auth')
|
||||
|
||||
const router = Router()
|
||||
|
||||
// Все эндпоинты статистики требуют авторизации
|
||||
router.use(authMiddleware)
|
||||
|
||||
// Агрегация по дням: количество сигарет в день для построения графика
|
||||
router.get('/daily', async (req, res, next) => {
|
||||
try {
|
||||
const user = req.user
|
||||
const { from, to } = req.query
|
||||
|
||||
const now = new Date()
|
||||
const defaultFrom = new Date(now)
|
||||
defaultFrom.setDate(defaultFrom.getDate() - 30)
|
||||
|
||||
const fromDate = from ? new Date(from) : defaultFrom
|
||||
const toDate = to ? new Date(to) : now
|
||||
|
||||
const match = {
|
||||
userId: user.id,
|
||||
smokedAt: {
|
||||
$gte: fromDate,
|
||||
$lte: toDate,
|
||||
},
|
||||
}
|
||||
|
||||
const data = await CigaretteModel.aggregate([
|
||||
{ $match: match },
|
||||
{
|
||||
$group: {
|
||||
_id: {
|
||||
$dateToString: { format: '%Y-%m-%d', date: '$smokedAt' },
|
||||
},
|
||||
count: { $sum: 1 },
|
||||
},
|
||||
},
|
||||
{ $sort: { _id: 1 } },
|
||||
])
|
||||
|
||||
const result = data.map((item) => ({
|
||||
date: item._id,
|
||||
count: item.count,
|
||||
}))
|
||||
|
||||
res.json(getAnswer(null, result))
|
||||
} catch (err) {
|
||||
next(err)
|
||||
}
|
||||
})
|
||||
|
||||
module.exports = router
|
||||
|
||||
|
||||
Reference in New Issue
Block a user