(req: NextRequest, { params }: RouteParams)
| 39 | } |
| 40 | |
| 41 | export async function GET(req: NextRequest, { params }: RouteParams) { |
| 42 | // Check admin authentication |
| 43 | const authResult = await checkAdminAuth() |
| 44 | if (authResult instanceof NextResponse) { |
| 45 | return authResult |
| 46 | } |
| 47 | |
| 48 | const { clientId } = await params |
| 49 | |
| 50 | if (!clientId) { |
| 51 | return NextResponse.json( |
| 52 | { error: 'Missing required parameter: clientId' }, |
| 53 | { status: 400 }, |
| 54 | ) |
| 55 | } |
| 56 | |
| 57 | try { |
| 58 | // Query all messages for this client_id |
| 59 | const messages = await db |
| 60 | .select({ |
| 61 | id: schema.message.id, |
| 62 | client_request_id: schema.message.client_request_id, |
| 63 | finished_at: schema.message.finished_at, |
| 64 | model: schema.message.model, |
| 65 | request: schema.message.request, |
| 66 | response: schema.message.response, |
| 67 | credits: schema.message.credits, |
| 68 | }) |
| 69 | .from(schema.message) |
| 70 | .where(eq(schema.message.client_id, clientId)) |
| 71 | .orderBy(schema.message.finished_at) |
| 72 | |
| 73 | if (messages.length === 0) { |
| 74 | return NextResponse.json( |
| 75 | { error: 'No messages found for this client ID' }, |
| 76 | { status: 404 }, |
| 77 | ) |
| 78 | } |
| 79 | |
| 80 | // Transform messages into client messages |
| 81 | const clientMessages: ClientMessage[] = messages.map((msg) => ({ |
| 82 | id: msg.id, |
| 83 | client_request_id: msg.client_request_id ?? 'NULL', |
| 84 | timestamp: msg.finished_at, |
| 85 | user_prompt: extractUserPromptFromRequest(msg.request), |
| 86 | assistant_response: extractAssistantResponseFromResponse(msg.response), |
| 87 | model: msg.model, |
| 88 | credits_used: msg.credits, |
| 89 | })) |
| 90 | |
| 91 | // Calculate total credits |
| 92 | const totalCredits = messages.reduce((sum, msg) => sum + msg.credits, 0) |
| 93 | |
| 94 | // Get date range |
| 95 | const dateRange = { |
| 96 | start: messages[0].finished_at, |
| 97 | end: messages[messages.length - 1].finished_at, |
| 98 | } |
nothing calls this directly
no test coverage detected