update: add auth messages clean service for periodic expired auth messages clean

This commit is contained in:
Andrew Besedin 2026-02-19 13:42:54 +03:00
parent 094cc327d7
commit 2ea7db5154
3 changed files with 58 additions and 1 deletions

View file

@ -1,4 +1,4 @@
import { Transaction } from 'sequelize';
import { Op, Transaction } from 'sequelize';
import AuthMessage from '@/schemes/AuthMessage';
@ -68,6 +68,20 @@ class AuthMessagesModel {
transaction,
});
};
deleteAllExpired = async (
{ now }: { now: Date },
{ transaction }: { transaction?: Transaction } = {},
): Promise<void> => {
await AuthMessage.destroy({
where: {
expires_at: {
[Op.lt]: now,
},
},
transaction,
});
};
}
const authMessagesModel = new AuthMessagesModel();

View file

@ -3,6 +3,7 @@ import express from 'express';
import http from 'http';
import { Server } from 'socket.io';
import authMessagesCleanService from '@/workers/authMessagesCleanService';
import authRouter from './routes/auth.router';
import offersRouter from './routes/offers.router';
import userRouter from './routes/user.router';
@ -73,6 +74,7 @@ process.on('unhandledRejection', (reason, promise) => {
assetsUpdateChecker.run();
ordersModerationService.run();
authMessagesCleanService.run();
exchangeModel.runPairStatsDaemon();
statsModel.init();

View file

@ -0,0 +1,41 @@
import authMessagesModel from '@/models/AuthMessages';
const CLEAN_INTERVAL = 60 * 60 * 1000; // 1 hour
class AuthMessagesCleanService {
run = async () => {
console.log(
`Auth messages clean service is running. Cleaning interval: ${CLEAN_INTERVAL / 1000} sec.`,
);
async function clean() {
console.log(`[${new Date()}] Cleaning auth messages...`);
await authMessagesModel.deleteAllExpired({ now: new Date() });
console.log(`[${new Date()}] Auth messages cleaned.`);
}
// eslint-disable-next-line no-constant-condition
while (true) {
try {
await clean();
} catch (error) {
console.log(
`[${new Date()}] Error while cleaning auth messages. Continuing on next iteration. Error:`,
);
console.error(error);
}
console.log(
`[${new Date()}] Auth messages cleaned. Next cleaning in ${CLEAN_INTERVAL / 1000} sec.`,
);
await new Promise((resolve) => setTimeout(resolve, CLEAN_INTERVAL));
}
};
}
const authMessagesCleanService = new AuthMessagesCleanService();
export default authMessagesCleanService;