import express from 'express'; import { ReportingService } from '../services/reporting.service.js'; import { TimeManager } from '../utils/time.utils.js'; export function createReportingRouter(apiKey, apiRevision) { const router = express.Router(); const reportingService = new ReportingService(apiKey, apiRevision); const timeManager = new TimeManager(); // Get campaign reports by time range router.get('/campaigns/:timeRange', async (req, res) => { try { const { timeRange } = req.params; const { startDate, endDate } = req.query; let params = {}; if (timeRange === 'custom' && startDate && endDate) { const range = timeManager.getCustomRange(startDate, endDate); if (!range) { return res.status(400).json({ error: 'Invalid date range' }); } params = { startDate: range.start.toISO(), endDate: range.end.toISO() }; } else { params = { timeRange }; } const data = await reportingService.getCampaignReports(params); // Transform the data to match the expected format const transformedData = { data: data.data.map(campaign => ({ id: campaign.id, name: campaign.name, subject: campaign.subject, send_time: campaign.send_time, stats: { delivery_rate: campaign.attributes?.statistics?.delivery_rate || 0, delivered: campaign.attributes?.statistics?.delivered || 0, recipients: campaign.attributes?.statistics?.recipients || 0, open_rate: campaign.attributes?.statistics?.open_rate || 0, opens_unique: campaign.attributes?.statistics?.opens_unique || 0, opens: campaign.attributes?.statistics?.opens || 0, click_rate: campaign.attributes?.statistics?.click_rate || 0, clicks_unique: campaign.attributes?.statistics?.clicks_unique || 0, click_to_open_rate: campaign.attributes?.statistics?.click_to_open_rate || 0, conversion_value: campaign.attributes?.statistics?.conversion_value || 0, conversion_uniques: campaign.attributes?.statistics?.conversion_uniques || 0 } })) }; res.json(transformedData); } catch (error) { console.error('[Reporting Route] Error:', error); res.status(500).json({ status: 'error', message: error.message, details: error.response?.data || null }); } }); return router; }