From dd75c54b3225ec1b516c8295f2b81eb109069c41 Mon Sep 17 00:00:00 2001 From: Primakov Alexandr Alexandrovich Date: Mon, 17 Nov 2025 14:04:46 +0300 Subject: [PATCH] Refactor userId handling in cigarettes and stats routes to use mongoose ObjectId for consistency; add debug logging for stats aggregation. --- server/routers/smoke-tracker/cigarettes.js | 5 +++-- server/routers/smoke-tracker/stats.js | 12 ++++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/server/routers/smoke-tracker/cigarettes.js b/server/routers/smoke-tracker/cigarettes.js index 1cec10c..0851dc0 100644 --- a/server/routers/smoke-tracker/cigarettes.js +++ b/server/routers/smoke-tracker/cigarettes.js @@ -1,4 +1,5 @@ const { Router } = require('express') +const mongoose = require('mongoose') const { getAnswer } = require('../../utils/common') const { CigaretteModel } = require('./model/cigarette') @@ -27,7 +28,7 @@ router.post('/', async (req, res, next) => { } const item = await CigaretteModel.create({ - userId: user.id, + userId: new mongoose.Types.ObjectId(user.id), smokedAt: date, note, }) @@ -44,7 +45,7 @@ router.get('/', async (req, res, next) => { const user = req.user const { from, to } = req.query - const filter = { userId: user.id } + const filter = { userId: new mongoose.Types.ObjectId(user.id) } if (from || to) { filter.smokedAt = {} diff --git a/server/routers/smoke-tracker/stats.js b/server/routers/smoke-tracker/stats.js index 56b4791..e377a08 100644 --- a/server/routers/smoke-tracker/stats.js +++ b/server/routers/smoke-tracker/stats.js @@ -1,4 +1,5 @@ const { Router } = require('express') +const mongoose = require('mongoose') const { getAnswer } = require('../../utils/common') const { CigaretteModel } = require('./model/cigarette') @@ -23,19 +24,24 @@ router.get('/daily', async (req, res, next) => { const toDate = to ? new Date(to) : now const match = { - userId: user.id, + 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' }, + $dateToString: { format: '%Y-%m-%d', date: '$smokedAt', timezone: 'UTC' }, }, count: { $sum: 1 }, }, @@ -43,6 +49,8 @@ router.get('/daily', async (req, res, next) => { { $sort: { _id: 1 } }, ]) + console.log('[STATS] Aggregation result:', data) + const result = data.map((item) => ({ date: item._id, count: item.count,