import { NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { createRequestContainer } from '@open-mercato/shared/lib/di/container' import { getAuthFromRequest } from '@open-mercato/shared/lib/auth/server' import { resolveOrganizationScopeForRequest } from '@open-mercato/core/modules/directory/utils/organizationScope' import type { CommandBus } from '@open-mercato/shared/lib/commands' export const metadata = { POST: { requireAuth: true, requireFeatures: ['terminal_tracking.terminal_configs.manage'] }, } const testSchema = z.object({ id: z.string().uuid() }) export async function POST(request: NextRequest) { const auth = await getAuthFromRequest(request) if (!auth || !auth.orgId || !auth.tenantId) { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) } let body: unknown try { body = await request.json() } catch { return NextResponse.json({ error: 'Invalid JSON body' }, { status: 400 }) } const parsed = testSchema.safeParse(body) if (!parsed.success) { return NextResponse.json({ error: 'Invalid request', details: parsed.error.flatten() }, { status: 400 }) } const container = await createRequestContainer() const scope = await resolveOrganizationScopeForRequest({ container, auth, request }) const commandBus = container.resolve('commandBus') as CommandBus const selectedOrgId = scope?.selectedId ?? auth.orgId const tenantId = auth.tenantId try { const { result } = await commandBus.execute< { id: string; tenantId: string; organizationId: string }, { success: boolean; message: string; latencyMs?: number } >('terminal_tracking.terminal_config.test', { input: { id: parsed.data.id, tenantId, organizationId: selectedOrgId }, ctx: { container, auth, organizationScope: scope, selectedOrganizationId: selectedOrgId ?? null, organizationIds: scope?.filterIds ?? (selectedOrgId ? [selectedOrgId] : null), request, }, metadata: { tenantId: tenantId ?? null, organizationId: selectedOrgId ?? null, resourceKind: 'terminal_tracking.terminal_config', resourceId: parsed.data.id, }, }) return NextResponse.json(result) } catch (error) { const message = error instanceof Error ? error.message : 'Failed to test terminal config' return NextResponse.json({ error: message }, { status: 400 }) } }