Skip to content

Commit 6da355c

Browse files
committed
Delete pending orders job
This PR deletes all pending orders with a time greather than ORDER_PUBLISHED_EXPIRATION_WINDOW
1 parent ff163a1 commit 6da355c

File tree

4 files changed

+31
-3
lines changed

4 files changed

+31
-3
lines changed

.env-sample

+4-1
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,7 @@ PENDING_PAYMENT_WINDOW=5
3131
# Fiat currency rate API
3232
FIAT_RATE_NAME=''
3333
FIAT_RATE_EP=''
34-
NODE_ENV='development'
34+
NODE_ENV='development'
35+
36+
# Expiration time for published order in seconds
37+
ORDER_PUBLISHED_EXPIRATION_WINDOW=82800

bot/start.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ const {
3232
validateInvoice,
3333
} = require('./validations');
3434
const messages = require('./messages');
35-
const { attemptPendingPayments, cancelOrders } = require('../jobs');
35+
const { attemptPendingPayments, cancelOrders, deleteOrders } = require('../jobs');
3636
const addInvoiceWizard = require('./scenes');
3737

3838
const initialize = (botToken, options) => {
@@ -45,6 +45,9 @@ const initialize = (botToken, options) => {
4545
const cancelOrderJob = schedule.scheduleJob(`*/2 * * * *`, async () => {
4646
await cancelOrders(bot);
4747
});
48+
const deleteOrdersJob = schedule.scheduleJob(`15 * * * *`, async () => {
49+
await deleteOrders(bot);
50+
});
4851

4952
const stage = new Scenes.Stage([addInvoiceWizard]);
5053
bot.use(session());

jobs/delete_published_orders.js

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
const { Order } = require('../models');
2+
3+
const deleteOrders = async (bot) => {
4+
const windowTime = new Date();
5+
windowTime.setSeconds(windowTime.getSeconds() - parseInt(process.env.ORDER_PUBLISHED_EXPIRATION_WINDOW));
6+
// console.log(windowTime)
7+
// We get the pending orders where time is expired
8+
const pendingOrders = await Order.find({
9+
status: 'PENDING',
10+
created_at: { $lte: windowTime },
11+
});
12+
for (const order of pendingOrders) {
13+
console.log(`Pending order Id: ${order._id} expired after ${process.env.ORDER_PUBLISHED_EXPIRATION_WINDOW} seconds, deleting it from database and channel`);
14+
// We delete the messages related to that order from the channel
15+
await bot.telegram.deleteMessage(process.env.CHANNEL, order.tg_channel_message1);
16+
await bot.telegram.deleteMessage(process.env.CHANNEL, order.tg_channel_message2);
17+
await order.remove();
18+
}
19+
};
20+
21+
module.exports = deleteOrders;

jobs/index.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
const attemptPendingPayments = require('./pending_payments');
22
const cancelOrders = require('./cancel_orders');
3+
const deleteOrders = require('./delete_published_orders');
34

4-
module.exports = { attemptPendingPayments, cancelOrders };
5+
module.exports = { attemptPendingPayments, cancelOrders, deleteOrders };

0 commit comments

Comments
 (0)