1
1
import { NextRequest , NextResponse } from "next/server" ;
2
2
3
+ import { z } from "zod" ;
4
+
3
5
import { verifyDataroomSession } from "@/lib/auth/dataroom-auth" ;
4
6
import prisma from "@/lib/prisma" ;
5
7
8
+ // Validation schema for query parameters
9
+ const visitorFAQParamsSchema = z . object ( {
10
+ linkId : z . string ( ) . cuid ( "Invalid link ID format" ) ,
11
+ dataroomId : z . string ( ) . cuid ( "Invalid dataroom ID format" ) ,
12
+ documentId : z . string ( ) . cuid ( "Invalid document ID format" ) . optional ( ) , // This is actually dataroomDocumentId
13
+ } ) ;
14
+
6
15
export interface VisitorFAQResponse {
7
16
id : string ;
8
17
editedQuestion : string ;
@@ -19,17 +28,26 @@ export interface VisitorFAQResponse {
19
28
export async function GET ( req : NextRequest ) {
20
29
try {
21
30
const searchParams = req . nextUrl . searchParams ;
22
- const linkId = searchParams . get ( "linkId" ) ;
23
- const dataroomId = searchParams . get ( "dataroomId" ) ;
24
- const documentId = searchParams . get ( "documentId" ) ;
25
31
26
- if ( ! linkId || ! dataroomId ) {
32
+ // Validate query parameters
33
+ const paramValidation = visitorFAQParamsSchema . safeParse ( {
34
+ linkId : searchParams . get ( "linkId" ) ,
35
+ dataroomId : searchParams . get ( "dataroomId" ) ,
36
+ documentId : searchParams . get ( "documentId" ) , // This is actually dataroomDocumentId
37
+ } ) ;
38
+
39
+ if ( ! paramValidation . success ) {
27
40
return NextResponse . json (
28
- { error : "linkId and dataroomId are required" } ,
41
+ {
42
+ error : "Invalid parameters" ,
43
+ details : paramValidation . error . errors [ 0 ] ?. message ,
44
+ } ,
29
45
{ status : 400 } ,
30
46
) ;
31
47
}
32
48
49
+ const { linkId, dataroomId, documentId } = paramValidation . data ;
50
+
33
51
// Verify dataroom session
34
52
const session = await verifyDataroomSession ( req , linkId , dataroomId ) ;
35
53
if ( ! session ) {
0 commit comments