Files
internship_node/day4/cronjobs/email_queue.js
T
2025-07-11 20:19:55 +01:00

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);
}
})();