ads-marketing/mail-service/src/controllers/campaignController.js

66 lines
2.3 KiB
JavaScript

import { Campaign, EmailTemplateVersion, MailingGroup, SmtpServer } from '../models/index.js';
export default {
async create(req, res) {
try {
const { smtp_server_ids, ...campaignData } = req.body;
const campaign = await Campaign.create(campaignData);
if (Array.isArray(smtp_server_ids)) {
await campaign.setSmtpServers(smtp_server_ids);
}
const campaignWithSmtps = await Campaign.findByPk(campaign.id, { include: [SmtpServer] });
res.status(201).json(campaignWithSmtps);
} catch (err) {
res.status(400).json({ error: err.message });
}
},
async getAll(req, res) {
try {
const limit = parseInt(req.query.limit) || 20;
const offset = parseInt(req.query.offset) || 0;
const result = await Campaign.findAndCountAll({
include: [EmailTemplateVersion, MailingGroup, SmtpServer],
limit,
offset,
order: [['id', 'ASC']]
});
res.json({ count: result.count, rows: result.rows });
} catch (err) {
res.status(500).json({ error: err.message });
}
},
async getById(req, res) {
try {
const campaign = await Campaign.findByPk(req.params.id, { include: [EmailTemplateVersion, MailingGroup, SmtpServer] });
if (!campaign) return res.status(404).json({ error: 'Campaign not found' });
res.json(campaign);
} catch (err) {
res.status(500).json({ error: err.message });
}
},
async update(req, res) {
try {
const { smtp_server_ids, ...campaignData } = req.body;
const campaign = await Campaign.findByPk(req.params.id);
if (!campaign) return res.status(404).json({ error: 'Campaign not found' });
await campaign.update(campaignData);
if (Array.isArray(smtp_server_ids)) {
await campaign.setSmtpServers(smtp_server_ids);
}
const campaignWithSmtps = await Campaign.findByPk(campaign.id, { include: [SmtpServer] });
res.json(campaignWithSmtps);
} catch (err) {
res.status(400).json({ error: err.message });
}
},
async delete(req, res) {
try {
const campaign = await Campaign.findByPk(req.params.id);
if (!campaign) return res.status(404).json({ error: 'Campaign not found' });
await campaign.destroy();
res.json({ message: 'Campaign deleted' });
} catch (err) {
res.status(500).json({ error: err.message });
}
},
};