удалить и другая красота

This commit is contained in:
2026-03-11 16:38:44 +05:00
parent ec5a1a898b
commit 76075da0ad
4 changed files with 298 additions and 169 deletions

61
task-timeout.js Normal file
View File

@@ -0,0 +1,61 @@
// 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
};