Add campaigns component and services

This commit is contained in:
2024-12-27 01:32:48 -05:00
parent aaa95a5b9e
commit e8b5f8ce07
13 changed files with 883 additions and 24 deletions

View File

@@ -0,0 +1,72 @@
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 timeManager = new TimeManager();
const reportingService = new ReportingService(apiKey, apiRevision);
// Get campaign reports with optional filtering
router.get('/campaigns', async (req, res) => {
try {
const { timeRange, startDate, endDate } = req.query;
let params = {};
if (timeRange === 'custom') {
if (!startDate || !endDate) {
return res.status(400).json({ error: 'Custom range requires startDate and endDate' });
}
params = { startDate, endDate };
} else {
params = { timeRange: timeRange || 'last30days' };
}
console.log('[Reporting Route] Fetching campaign reports with params:', params);
const data = await reportingService.getEnrichedCampaignReports(params);
console.log('[Reporting Route] Success:', {
count: data.data?.length || 0
});
res.json(data);
} catch (error) {
console.error('[Reporting Route] Error:', error);
res.status(500).json({
status: 'error',
message: error.message,
details: error.response?.data || null
});
}
});
// Get campaign reports by time range
router.get('/campaigns/:timeRange', async (req, res) => {
try {
const { timeRange } = req.params;
let result;
if (timeRange === 'custom') {
const { startDate, endDate } = req.query;
if (!startDate || !endDate) {
return res.status(400).json({ error: 'Custom range requires startDate and endDate' });
}
result = await reportingService.getEnrichedCampaignReports({
startDate,
endDate
});
} else {
result = await reportingService.getEnrichedCampaignReports({
timeRange
});
}
res.json(result);
} catch (error) {
console.error("[Reporting Route] Error:", error);
res.status(500).json({ error: error.message });
}
});
return router;
}