удалить и другая красота
This commit is contained in:
61
task-timeout.js
Normal file
61
task-timeout.js
Normal 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
|
||||
};
|
||||
Reference in New Issue
Block a user