56 lines
2.2 KiB
JavaScript
56 lines
2.2 KiB
JavaScript
// Google Analytics router — ESM conversion of google-server/routes/analytics.routes.js.
|
|
// All routes are read-only — authenticated-only is sufficient; no extra permission.
|
|
// google_write is reserved for future write endpoints (per migration 005).
|
|
|
|
import express from 'express';
|
|
import { AnalyticsService } from '../../services/google/analytics.service.js';
|
|
|
|
export function createGoogleRouter({ redis }) {
|
|
const router = express.Router();
|
|
const service = new AnalyticsService(redis);
|
|
|
|
router.get('/metrics', async (req, res) => {
|
|
try {
|
|
const { startDate = '7daysAgo' } = req.query;
|
|
const data = await service.getBasicMetrics(startDate);
|
|
res.json({ success: true, data });
|
|
} catch (error) {
|
|
console.error('Metrics error:', { startDate: req.query.startDate, error: error.message });
|
|
res.status(500).json({ success: false, error: 'Failed to fetch metrics', details: error.message });
|
|
}
|
|
});
|
|
|
|
router.get('/realtime/basic', async (req, res) => {
|
|
try {
|
|
const data = await service.getRealTimeBasicData();
|
|
res.json({ success: true, data });
|
|
} catch (error) {
|
|
console.error('Realtime basic error:', { error: error.message });
|
|
res.status(500).json({ success: false, error: 'Failed to fetch realtime basic data', details: error.message });
|
|
}
|
|
});
|
|
|
|
router.get('/realtime/detailed', async (req, res) => {
|
|
try {
|
|
const data = await service.getRealTimeDetailedData();
|
|
res.json({ success: true, data });
|
|
} catch (error) {
|
|
console.error('Realtime detailed error:', { error: error.message });
|
|
res.status(500).json({ success: false, error: 'Failed to fetch realtime detailed data', details: error.message });
|
|
}
|
|
});
|
|
|
|
router.get('/user-behavior', async (req, res) => {
|
|
try {
|
|
const { timeRange = '30' } = req.query;
|
|
const data = await service.getUserBehavior(timeRange);
|
|
res.json({ success: true, data });
|
|
} catch (error) {
|
|
console.error('User behavior error:', { timeRange: req.query.timeRange, error: error.message });
|
|
res.status(500).json({ success: false, error: 'Failed to fetch user behavior data', details: error.message });
|
|
}
|
|
});
|
|
|
|
return router;
|
|
}
|