11import { auth } from '@/app/(auth)/auth' ;
2- import { ArtifactKind } from '@/components/artifact' ;
2+ import type { ArtifactKind } from '@/components/artifact' ;
33import {
44 deleteDocumentsByIdAfterTimestamp ,
55 getDocumentsById ,
66 saveDocument ,
77} from '@/lib/db/queries' ;
8+ import { apiErrors , successResponse } from '@/lib/responses' ;
89
910export async function GET ( request : Request ) {
1011 const { searchParams } = new URL ( request . url ) ;
1112 const id = searchParams . get ( 'id' ) ;
1213
1314 if ( ! id ) {
14- return new Response ( 'Missing id' , { status : 400 } ) ;
15+ return apiErrors . missingParameter ( ) ;
1516 }
1617
1718 const session = await auth ( ) ;
1819
19- if ( ! session || ! session . user ) {
20- return new Response ( 'Unauthorized' , { status : 401 } ) ;
20+ if ( ! session ? .user ?. id ) {
21+ return apiErrors . unauthorized ( ) ;
2122 }
2223
2324 const documents = await getDocumentsById ( { id } ) ;
2425
2526 const [ document ] = documents ;
2627
2728 if ( ! document ) {
28- return new Response ( 'Not Found' , { status : 404 } ) ;
29+ return apiErrors . documentNotFound ( ) ;
2930 }
3031
3132 if ( document . userId !== session . user . id ) {
32- return new Response ( 'Unauthorized' , { status : 401 } ) ;
33+ return apiErrors . documentForbidden ( ) ;
3334 }
3435
35- return Response . json ( documents , { status : 200 } ) ;
36+ return successResponse ( documents ) ;
3637}
3738
3839export async function POST ( request : Request ) {
3940 const { searchParams } = new URL ( request . url ) ;
4041 const id = searchParams . get ( 'id' ) ;
4142
4243 if ( ! id ) {
43- return new Response ( 'Missing id' , { status : 400 } ) ;
44+ return apiErrors . missingParameter ( ) ;
4445 }
4546
4647 const session = await auth ( ) ;
4748
4849 if ( ! session ) {
49- return new Response ( 'Unauthorized' , { status : 401 } ) ;
50+ return apiErrors . unauthorized ( ) ;
5051 }
5152
5253 const {
@@ -56,49 +57,62 @@ export async function POST(request: Request) {
5657 } : { content : string ; title : string ; kind : ArtifactKind } =
5758 await request . json ( ) ;
5859
59- if ( session . user ?. id ) {
60- const document = await saveDocument ( {
61- id ,
62- content ,
63- title ,
64- kind ,
65- userId : session . user . id ,
66- } ) ;
60+ if ( ! session ? .user ?. id ) {
61+ return apiErrors . unauthorized ( ) ;
62+ }
63+
64+ const documents = await getDocumentsById ( { id : id } ) ;
65+
66+ if ( documents . length > 0 ) {
67+ const [ document ] = documents ;
6768
68- return Response . json ( document , { status : 200 } ) ;
69+ if ( document . userId !== session . user . id ) {
70+ return apiErrors . documentForbidden ( ) ;
71+ }
6972 }
7073
71- return new Response ( 'Unauthorized' , { status : 401 } ) ;
74+ const [ createdDocument ] = await saveDocument ( {
75+ id,
76+ content,
77+ title,
78+ kind,
79+ userId : session . user . id ,
80+ } ) ;
81+
82+ return successResponse ( createdDocument ) ;
7283}
7384
74- export async function PATCH ( request : Request ) {
85+ export async function DELETE ( request : Request ) {
7586 const { searchParams } = new URL ( request . url ) ;
7687 const id = searchParams . get ( 'id' ) ;
77-
78- const { timestamp } : { timestamp : string } = await request . json ( ) ;
88+ const timestamp = searchParams . get ( 'timestamp' ) ;
7989
8090 if ( ! id ) {
81- return new Response ( 'Missing id' , { status : 400 } ) ;
91+ return apiErrors . missingParameter ( ) ;
92+ }
93+
94+ if ( ! timestamp ) {
95+ return apiErrors . missingParameter ( ) ;
8296 }
8397
8498 const session = await auth ( ) ;
8599
86- if ( ! session || ! session . user ) {
87- return new Response ( 'Unauthorized' , { status : 401 } ) ;
100+ if ( ! session ? .user ?. id ) {
101+ return apiErrors . unauthorized ( ) ;
88102 }
89103
90104 const documents = await getDocumentsById ( { id } ) ;
91105
92106 const [ document ] = documents ;
93107
94108 if ( document . userId !== session . user . id ) {
95- return new Response ( 'Unauthorized' , { status : 401 } ) ;
109+ return apiErrors . documentForbidden ( ) ;
96110 }
97111
98- await deleteDocumentsByIdAfterTimestamp ( {
112+ const deletedDocuments = await deleteDocumentsByIdAfterTimestamp ( {
99113 id,
100114 timestamp : new Date ( timestamp ) ,
101115 } ) ;
102116
103- return new Response ( 'Deleted' , { status : 200 } ) ;
117+ return successResponse ( deletedDocuments ) ;
104118}
0 commit comments