import type {NextRequest} from 'next/server'; import {reportsApi} from '@/services/api/reportsApi'; import {toConversion} from '@/services/api/reportMapper'; import {toReportWindow, toSiteParam} from '@/services/api/range'; import {previousWindow} from '@/services/api/previousWindow'; import {serveUpstream} from '@/shared/services/bff'; import type {ApiConversionReport, BucketSize} from '@/services/api/types'; export const dynamic = 'force-dynamic'; const BUCKETS: BucketSize[] = ['hour', 'day', 'week', 'month']; /** GET /api/reports/conversion — purchases, revenue and basket size. */ export async function GET(req: NextRequest) { const url = new URL(req.url); const bucketParam = url.searchParams.get('bucket'); const bucket = BUCKETS.includes(bucketParam as BucketSize) ? (bucketParam as BucketSize) : undefined; const wantsPrevious = url.searchParams.get('compare') === 'previous'; return serveUpstream(req, async (token, query) => { const window = toReportWindow(query.range, new Date(query.nowMs), bucket); const site = toSiteParam(query.storeId); const [current, previous] = await Promise.all([ reportsApi.conversion(token, window, site), wantsPrevious ? reportsApi.conversion(token, previousWindow(window), site) : Promise.resolve(null as ApiConversionReport | null), ]); return toConversion(current, previous); }); }