import type { FastifyPluginAsync } from 'fastify' import { z } from 'zod' import { ReportService } from '../../services/report.service.js' const DailyReportQuerySchema = z.object({ locationId: z.string().uuid(), date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/), }) export const reportRoutes: FastifyPluginAsync = async (app) => { // X or Z report for a drawer session app.get('/reports/drawer/:id', { preHandler: [app.authenticate, app.requirePermission('pos.view')] }, async (request, reply) => { const { id } = request.params as { id: string } const report = await ReportService.getDrawerReport(app.db, id) return reply.send(report) }) // Daily rollup for a location app.get('/reports/daily', { preHandler: [app.authenticate, app.requirePermission('pos.view')] }, async (request, reply) => { const parsed = DailyReportQuerySchema.safeParse(request.query) if (!parsed.success) { return reply.status(400).send({ error: { message: 'Validation failed — locationId and date (YYYY-MM-DD) are required', details: parsed.error.flatten(), statusCode: 400 } }) } const report = await ReportService.getDailyReport(app.db, parsed.data.locationId, parsed.data.date) return reply.send(report) }) }