Refactor userId handling in cigarettes and stats routes to use mongoose ObjectId for consistency; add debug logging for stats aggregation.

This commit is contained in:
Primakov Alexandr Alexandrovich
2025-11-17 14:04:46 +03:00
parent f6f9163c3f
commit dd75c54b32
2 changed files with 13 additions and 4 deletions

View File

@@ -1,4 +1,5 @@
const { Router } = require('express') const { Router } = require('express')
const mongoose = require('mongoose')
const { getAnswer } = require('../../utils/common') const { getAnswer } = require('../../utils/common')
const { CigaretteModel } = require('./model/cigarette') const { CigaretteModel } = require('./model/cigarette')
@@ -27,7 +28,7 @@ router.post('/', async (req, res, next) => {
} }
const item = await CigaretteModel.create({ const item = await CigaretteModel.create({
userId: user.id, userId: new mongoose.Types.ObjectId(user.id),
smokedAt: date, smokedAt: date,
note, note,
}) })
@@ -44,7 +45,7 @@ router.get('/', async (req, res, next) => {
const user = req.user const user = req.user
const { from, to } = req.query const { from, to } = req.query
const filter = { userId: user.id } const filter = { userId: new mongoose.Types.ObjectId(user.id) }
if (from || to) { if (from || to) {
filter.smokedAt = {} filter.smokedAt = {}

View File

@@ -1,4 +1,5 @@
const { Router } = require('express') const { Router } = require('express')
const mongoose = require('mongoose')
const { getAnswer } = require('../../utils/common') const { getAnswer } = require('../../utils/common')
const { CigaretteModel } = require('./model/cigarette') const { CigaretteModel } = require('./model/cigarette')
@@ -23,19 +24,24 @@ router.get('/daily', async (req, res, next) => {
const toDate = to ? new Date(to) : now const toDate = to ? new Date(to) : now
const match = { const match = {
userId: user.id, userId: new mongoose.Types.ObjectId(user.id),
smokedAt: { smokedAt: {
$gte: fromDate, $gte: fromDate,
$lte: toDate, $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([ const data = await CigaretteModel.aggregate([
{ $match: match }, { $match: match },
{ {
$group: { $group: {
_id: { _id: {
$dateToString: { format: '%Y-%m-%d', date: '$smokedAt' }, $dateToString: { format: '%Y-%m-%d', date: '$smokedAt', timezone: 'UTC' },
}, },
count: { $sum: 1 }, count: { $sum: 1 },
}, },
@@ -43,6 +49,8 @@ router.get('/daily', async (req, res, next) => {
{ $sort: { _id: 1 } }, { $sort: { _id: 1 } },
]) ])
console.log('[STATS] Aggregation result:', data)
const result = data.map((item) => ({ const result = data.map((item) => ({
date: item._id, date: item._id,
count: item.count, count: item.count,