41 lines
1.3 KiB
TypeScript
41 lines
1.3 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server';
|
|
import {
|
|
getDayOfWeekAnalytics,
|
|
getMonthOfYearAnalytics,
|
|
getSeasonalityByAttribute,
|
|
} from '@/lib/analytics/seasonality.service';
|
|
import { parseAnalyticsParams } from '../_utils';
|
|
|
|
export async function GET(request: NextRequest) {
|
|
try {
|
|
const filters = parseAnalyticsParams(request);
|
|
const { searchParams } = new URL(request.url);
|
|
const view = searchParams.get('view') || 'day-of-week';
|
|
const attribute = searchParams.get('attribute') as 'size' | 'color' | null;
|
|
|
|
let result;
|
|
switch (view) {
|
|
case 'month-of-year':
|
|
result = await getMonthOfYearAnalytics(filters);
|
|
break;
|
|
case 'by-attribute':
|
|
if (attribute && ['size', 'color'].includes(attribute)) {
|
|
result = await getSeasonalityByAttribute(filters, attribute);
|
|
} else {
|
|
return NextResponse.json(
|
|
{ error: 'attribute parameter required (size or color)' },
|
|
{ status: 422 },
|
|
);
|
|
}
|
|
break;
|
|
default:
|
|
result = await getDayOfWeekAnalytics(filters);
|
|
}
|
|
|
|
return NextResponse.json(result);
|
|
} catch (error) {
|
|
console.error('GET /api/analytics/seasonality error:', error);
|
|
return NextResponse.json({ error: 'Failed to fetch seasonality analytics' }, { status: 500 });
|
|
}
|
|
}
|