// task-timeout.js // Хранилище времени последнего создания задачи для каждого пользователя const lastTaskCreationTime = new Map(); // Middleware для проверки таймаута между созданием задач const checkTaskCreationTimeout = (req, res, next) => { const userId = req.session?.user?.id; if (!userId) { return next(); } const now = Date.now(); const timeoutMs = 15000; // 15 секунд в миллисекундах if (lastTaskCreationTime.has(userId)) { const lastCreation = lastTaskCreationTime.get(userId); const timeSinceLastCreation = now - lastCreation; if (timeSinceLastCreation < timeoutMs) { const remainingSeconds = Math.ceil((timeoutMs - timeSinceLastCreation) / 1000); return res.status(429).json({ error: `Слишком частое создание задач. Подождите ${remainingSeconds} секунд.`, remainingSeconds: remainingSeconds, timeout: true }); } } // Помечаем, что проверка пройдена req.taskCreationCheckPassed = true; next(); }; // Функция для обновления времени создания const updateLastTaskCreationTime = (userId) => { if (userId) { lastTaskCreationTime.set(userId, Date.now()); console.log(`✅ Время создания задачи обновлено для пользователя ${userId}`); } }; // Очистка старых записей (раз в час) setInterval(() => { const oneHourAgo = Date.now() - 3600000; let deletedCount = 0; for (const [userId, creationTime] of lastTaskCreationTime.entries()) { if (creationTime < oneHourAgo) { lastTaskCreationTime.delete(userId); deletedCount++; } } if (deletedCount > 0) { console.log(`🧹 Очищено ${deletedCount} устаревших записей времени создания задач`); } }, 3600000); // Каждый час module.exports = { checkTaskCreationTimeout, updateLastTaskCreationTime };