This commit is contained in:
payacom
2026-08-31 20:45:41 +03:30
parent fa9f23c61d
commit 3f416a7a60
367 changed files with 621895 additions and 6443 deletions

View File

@@ -0,0 +1,57 @@
const cron = require('node-cron')
const BookingConfigModel = require('../models/BookingConfigModel')
const { notifyUser } = require('../utils/notifyUser')
let ioInstance = null
/** Called once from index.js right after the socket.io server is created — cron jobs have no `req`. */
function setIo (io) {
ioInstance = io
}
/** Auto-deactivate configs whose "تکرار هفته" window has ended, and notify the owner so they can renew it themselves. */
const expireWeeklyRepeatConfigs = async () => {
try {
const configs = await BookingConfigModel.find({
status: 'active',
weeklyRepeatCount: { $ne: null },
repeatStartedAt: { $ne: null }
})
const now = Date.now()
let expiredCount = 0
for (const config of configs) {
const expiresAt = new Date(config.repeatStartedAt).getTime() + config.weeklyRepeatCount * 7 * 24 * 60 * 60 * 1000
if (expiresAt > now) continue
try {
config.status = 'inactive'
await config.save()
expiredCount += 1
await notifyUser(ioInstance, config.owner, {
project_post_id: config._id,
type: 'booking',
title: 'پایان تکرار هفتگی رزرو',
description: `مهلت تکرار هفتگی (${config.weeklyRepeatCount} هفته) برای رزرو «${config.name}» به پایان رسید و غیرفعال شد. برای ادامه، آن را دوباره فعال کنید.`
})
} catch (err) {
console.error(`[BookingRepeatExpiryCron] failed to expire config ${config._id}:`, err)
}
}
if (expiredCount) {
console.log(`[BookingRepeatExpiryCron] auto-deactivated ${expiredCount} config(s) whose weekly repeat window ended`)
}
} catch (error) {
console.error('[BookingRepeatExpiryCron] check failed:', error)
}
}
// هر ساعت: بررسی پایان مهلت تکرار هفتگی رزروها
cron.schedule('0 * * * *', expireWeeklyRepeatConfigs)
module.exports = {
expireWeeklyRepeatConfigs,
setIo
}