@@ -165,6 +165,15 @@ tabularRouter.get("/", requireAuth, async (req, res) => {
165165 // Fetch distinct document counts per review
166166 const reviewIds = reviews . map ( ( r ) => ( r as { id : string } ) . id ) ;
167167 let docCounts : Record < string , number > = { } ;
168+ const reviewsWithExplicitDocs = new Set < string > ( ) ;
169+ for ( const review of reviews ) {
170+ const id = ( review as { id : string } ) . id ;
171+ if ( Array . isArray ( review . document_ids ) ) {
172+ const explicitDocIds = review . document_ids ;
173+ reviewsWithExplicitDocs . add ( id ) ;
174+ docCounts [ id ] = new Set ( explicitDocIds ) . size ;
175+ }
176+ }
168177 if ( reviewIds . length > 0 ) {
169178 const { data : cells } = await db
170179 . from ( "tabular_cells" )
@@ -176,8 +185,10 @@ tabularRouter.get("/", requireAuth, async (req, res) => {
176185 const key = `${ cell . review_id } :${ cell . document_id } ` ;
177186 if ( ! seen . has ( key ) ) {
178187 seen . add ( key ) ;
179- docCounts [ cell . review_id ] =
180- ( docCounts [ cell . review_id ] ?? 0 ) + 1 ;
188+ if ( ! reviewsWithExplicitDocs . has ( cell . review_id ) ) {
189+ docCounts [ cell . review_id ] =
190+ ( docCounts [ cell . review_id ] ?? 0 ) + 1 ;
191+ }
181192 }
182193 }
183194 }
@@ -229,6 +240,7 @@ tabularRouter.post("/", requireAuth, async (req, res) => {
229240 user_id : userId ,
230241 title : title ?? null ,
231242 columns_config,
243+ document_ids : allowedDocumentIds ,
232244 project_id : project_id ?? null ,
233245 workflow_id : workflow_id ?? null ,
234246 } )
@@ -345,17 +357,19 @@ tabularRouter.get("/:reviewId", requireAuth, async (req, res) => {
345357 . from ( "tabular_cells" )
346358 . select ( "*" )
347359 . eq ( "review_id" , reviewId ) ;
348- const docIds = [ ...new Set ( ( cells ?? [ ] ) . map ( ( c ) => c . document_id ) ) ] ;
360+ const cellDocIds = [ ...new Set ( ( cells ?? [ ] ) . map ( ( c ) => c . document_id ) ) ] ;
361+ const hasExplicitDocIds = Array . isArray ( review . document_ids ) ;
362+ const explicitDocIds = hasExplicitDocIds
363+ ? ( review . document_ids as string [ ] )
364+ : [ ] ;
365+ const docIds =
366+ hasExplicitDocIds
367+ ? explicitDocIds
368+ : cellDocIds ;
349369 const docsResult =
350370 docIds . length > 0
351371 ? await db . from ( "documents" ) . select ( "*" ) . in ( "id" , docIds )
352- : review . project_id
353- ? await db
354- . from ( "documents" )
355- . select ( "*" )
356- . eq ( "project_id" , review . project_id )
357- . order ( "created_at" , { ascending : true } )
358- : { data : [ ] as Record < string , unknown > [ ] } ;
372+ : { data : [ ] as Record < string , unknown > [ ] } ;
359373
360374 res . json ( {
361375 review : { ...review , is_owner : access . isOwner } ,
@@ -517,6 +531,7 @@ tabularRouter.patch("/:reviewId", requireAuth, async (req, res) => {
517531 detail : updateError ?. message ?? "Failed to update review" ,
518532 } ) ;
519533
534+ let persistedDocumentIds : string [ ] | undefined ;
520535 if (
521536 Array . isArray ( req . body . columns_config ) ||
522537 Array . isArray ( req . body . document_ids )
@@ -577,13 +592,21 @@ tabularRouter.patch("/:reviewId", requireAuth, async (req, res) => {
577592 ( existingCells ?? [ ] ) . map ( ( cell ) => cell . document_id ) ,
578593 ) ,
579594 ] ;
580- if ( documentIds . length === 0 && existingReview . project_id ) {
581- const { data : projectDocs } = await db
582- . from ( "documents" )
583- . select ( "id" )
584- . eq ( "project_id" , existingReview . project_id ) ;
585- documentIds = ( projectDocs ?? [ ] ) . map ( ( doc ) => doc . id ) ;
586- }
595+ }
596+
597+ if ( Array . isArray ( req . body . document_ids ) ) {
598+ persistedDocumentIds = documentIds ;
599+ const { error : documentIdsError } = await db
600+ . from ( "tabular_reviews" )
601+ . update ( {
602+ document_ids : documentIds ,
603+ updated_at : new Date ( ) . toISOString ( ) ,
604+ } )
605+ . eq ( "id" , reviewId ) ;
606+ if ( documentIdsError )
607+ return void res . status ( 500 ) . json ( {
608+ detail : documentIdsError . message ,
609+ } ) ;
587610 }
588611
589612 const activeColumns = Array . isArray ( req . body . columns_config )
@@ -614,7 +637,10 @@ tabularRouter.patch("/:reviewId", requireAuth, async (req, res) => {
614637 }
615638 }
616639
617- res . json ( updatedReview ) ;
640+ res . json ( {
641+ ...updatedReview ,
642+ ...( persistedDocumentIds ? { document_ids : persistedDocumentIds } : { } ) ,
643+ } ) ;
618644} ) ;
619645
620646// DELETE /tabular-review/:reviewId
0 commit comments