57 lines
1.6 KiB
JavaScript
57 lines
1.6 KiB
JavaScript
const db = require("../models");
|
|
const { Op } = require("sequelize");
|
|
|
|
(async () => {
|
|
try {
|
|
const User = db.user;
|
|
const Email = db.email;
|
|
const EmailQueue = db.email_queue;
|
|
|
|
// 1. Get all active users
|
|
const users = await User.findAll({ where: { status: 1 } });
|
|
if (!users.length) {
|
|
console.log("No active users found.");
|
|
return;
|
|
}
|
|
|
|
// 2. Determine day and select emails
|
|
const today = new Date();
|
|
const day = today.getDay(); // 0=Sun, 1=Mon, ...
|
|
const isOddDay = day === 1 || day === 3 || day === 5; // Mon, Wed, Fri
|
|
const emailWhere = isOddDay
|
|
? { id: { [Op.mod]: [2, 1] } } // odd ids
|
|
: { id: { [Op.mod]: [2, 0] } }; // even ids
|
|
const emails = await Email.findAll({ where: emailWhere });
|
|
if (!emails.length) {
|
|
console.log("No emails found for today.");
|
|
return;
|
|
}
|
|
|
|
// 3. For each user and email, insert into email_queue
|
|
const tomorrow = new Date(today);
|
|
tomorrow.setDate(today.getDate() + 1);
|
|
const sendAt = tomorrow;
|
|
let count = 0;
|
|
for (const user of users) {
|
|
for (const email of emails) {
|
|
await EmailQueue.create({
|
|
email_id: email.id,
|
|
user_id: user.id,
|
|
status: 0, // not sent
|
|
created_at: today,
|
|
send_at: sendAt,
|
|
updated_at: today,
|
|
});
|
|
count++;
|
|
}
|
|
}
|
|
console.log(
|
|
`Inserted ${count} email_queue records for ${users.length} users and ${emails.length} emails.`
|
|
);
|
|
process.exit(0);
|
|
} catch (err) {
|
|
console.error("Error in email_queue cronjob:", err);
|
|
process.exit(1);
|
|
}
|
|
})();
|