add orders expiration
This commit is contained in:
parent
b508b6c99a
commit
5dd89ed9b4
2 changed files with 53 additions and 0 deletions
|
|
@ -24,6 +24,7 @@ import statsRouter from './routes/stats.router';
|
|||
import exchangeModel from './models/ExchangeTransactions';
|
||||
import { setupAssociations } from './schemes/Associations';
|
||||
import statsModel from './models/Stats';
|
||||
import ordersModerationService from './workers/ordersModerationService';
|
||||
|
||||
const PORT = process.env.PORT || 3000;
|
||||
|
||||
|
|
@ -71,6 +72,7 @@ process.on('unhandledRejection', (reason, promise) => {
|
|||
}
|
||||
|
||||
assetsUpdateChecker.run();
|
||||
ordersModerationService.run();
|
||||
exchangeModel.runPairStatsDaemon();
|
||||
statsModel.init();
|
||||
|
||||
|
|
|
|||
51
src/workers/ordersModerationService.ts
Normal file
51
src/workers/ordersModerationService.ts
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
import Order from '@/schemes/Order';
|
||||
import { Op } from 'sequelize';
|
||||
|
||||
const CHECKING_INTERVAL = 60 * 60 * 1000; // 1 hr
|
||||
const ORDER_EXPIRATION_TIME = 30 * 24 * 60 * 60 * 1000; // 30 days
|
||||
|
||||
class OrdersModerationService {
|
||||
public async run() {
|
||||
/* eslint-disable no-constant-condition */
|
||||
while (true) {
|
||||
await this.handleOrdersExpirations();
|
||||
console.log(
|
||||
`[${new Date()}] Orders moderation check is done. Next check in ${CHECKING_INTERVAL / 1000} sec.`,
|
||||
);
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, CHECKING_INTERVAL));
|
||||
}
|
||||
/* eslint-enable no-constant-condition */
|
||||
}
|
||||
|
||||
private async handleOrdersExpirations() {
|
||||
const now = +Date.now();
|
||||
|
||||
const ordersToExpire = await Order.findAll({
|
||||
where: {
|
||||
updatedAt: {
|
||||
[Op.lte]: new Date(now - ORDER_EXPIRATION_TIME),
|
||||
},
|
||||
status: 'active',
|
||||
},
|
||||
});
|
||||
|
||||
const idsToExpire = ordersToExpire.map((order) => order.id);
|
||||
|
||||
await Order.destroy({
|
||||
where: {
|
||||
id: idsToExpire,
|
||||
},
|
||||
});
|
||||
|
||||
if (idsToExpire.length > 0) {
|
||||
console.log(
|
||||
`[${new Date()}] Expired orders handled. Expired orders IDs: ${idsToExpire.join(', ')}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const ordersModerationService = new OrdersModerationService();
|
||||
|
||||
export default ordersModerationService;
|
||||
Loading…
Add table
Reference in a new issue