const { Router } = require('express') const mongoose = require('mongoose') 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: new mongoose.Types.ObjectId(user.id), smokedAt: { $gte: fromDate, $lte: toDate, }, } // Отладка: проверяем, сколько записей попадает в фильтр const totalCount = await CigaretteModel.countDocuments(match) console.log('[STATS] Match filter:', JSON.stringify(match, null, 2)) console.log('[STATS] Total cigarettes in range:', totalCount) const data = await CigaretteModel.aggregate([ { $match: match }, { $group: { _id: { $dateToString: { format: '%Y-%m-%d', date: '$smokedAt', timezone: 'UTC' }, }, count: { $sum: 1 }, }, }, { $sort: { _id: 1 } }, ]) console.log('[STATS] Aggregation result:', data) const result = data.map((item) => ({ date: item._id, count: item.count, })) res.json(getAnswer(null, result)) } catch (err) { next(err) } }) module.exports = router