11import { notFound } from 'next/navigation' ;
22import { getUser } from '@/app/(auth)/auth' ;
3- import { getDocumentById } from '@/lib/db/queries' ;
3+ import { getDocumentsById } from '@/lib/db/queries' ;
44import { AlwaysVisibleArtifact } from '@/components/always-visible-artifact' ;
55import { checkSubscriptionStatus } from '@/lib/subscription' ;
66import { Paywall } from '@/components/paywall' ;
7+ import type { Document } from '@snow-leopard/db' ;
78
89export const dynamic = 'auto' ;
910export const dynamicParams = true ;
@@ -13,45 +14,54 @@ export default async function DocumentPage(props: { params: Promise<{ id: string
1314 try {
1415 const documentId = params . id ;
1516
17+ const uuidRegex = / ^ [ 0 - 9 a - f ] { 8 } - [ 0 - 9 a - f ] { 4 } - [ 0 - 9 a - f ] { 4 } - [ 0 - 9 a - f ] { 4 } - [ 0 - 9 a - f ] { 12 } $ / i;
18+ if ( ! uuidRegex . test ( documentId ) ) {
19+ console . warn ( `[DocumentPage] Invalid document ID format: ${ documentId } ` ) ;
20+ return notFound ( ) ;
21+ }
22+
1623 const { hasActiveSubscription } = await checkSubscriptionStatus ( ) ;
1724
1825 if ( ! hasActiveSubscription ) {
1926 return < Paywall isOpen = { true } required = { true } /> ;
2027 }
2128
22- const [ document , user ] = await Promise . all ( [
23- getDocumentById ( { id : documentId } ) ,
29+ const [ documentsResult , user ] = await Promise . all ( [
30+ getDocumentsById ( { ids : [ documentId ] , userId : 'placeholder' } ) ,
2431 getUser ( ) ,
2532 ] ) ;
2633
2734 if ( ! user ) {
28- console . warn ( `[documents/[id]/page.tsx] User ${ documentId } : Active subscription status but no logged-in user found by getUser() . Redirecting.` ) ;
29- return notFound ( ) ; // Or redirect('/login')
35+ console . warn ( `[DocumentPage] User not found after subscription check . Redirecting.` ) ;
36+ return notFound ( ) ;
3037 }
3138
32- if ( ! document || user . id !== document . userId ) {
33- if ( ! document ) {
34- return (
35- < AlwaysVisibleArtifact
36- chatId = "placeholder-for-artifact"
37- initialDocumentId = "init"
38- showCreateDocumentForId = { documentId }
39- />
40- ) ;
41- } else {
42- return notFound ( ) ;
43- }
44- }
39+ const documents : Document [ ] = await getDocumentsById ( { ids : [ documentId ] , userId : user . id } ) ;
4540
41+ if ( ! documents || documents . length === 0 ) {
42+ console . log ( `[DocumentPage] Document ${ documentId } not found for user ${ user . id } . Showing create prompt.` ) ;
43+ return (
44+ < AlwaysVisibleArtifact
45+ chatId = "placeholder-for-artifact"
46+ initialDocumentId = "init"
47+ initialDocuments = { [ ] }
48+ showCreateDocumentForId = { documentId }
49+ user = { user }
50+ />
51+ ) ;
52+ }
53+
4654 return (
4755 < AlwaysVisibleArtifact
4856 chatId = "placeholder-for-artifact"
4957 initialDocumentId = { documentId }
58+ initialDocuments = { documents }
59+ user = { user }
5060 />
5161 ) ;
5262
5363 } catch ( error ) {
54- console . error ( `Page error for document ${ params . id } :` , error ) ;
64+ console . error ( `[DocumentPage] Page error for document ${ params . id } :` , error ) ;
5565 return notFound ( ) ;
5666 }
5767}
0 commit comments