11import { ActionFunction , json } from '@remix-run/node'
22import { createClient } from '@supabase/supabase-js'
3+ import z from 'zod'
34
45export const action : ActionFunction = async ( { request } ) => {
6+ const schema = z . object ( {
7+ feedback : z . string ( ) . min ( 1 ) ,
8+ page_title : z . string ( ) . min ( 1 ) ,
9+ variant : z . string ( ) ,
10+ } )
11+
512 const url = process . env . SUPABASE_URL
613 const key = process . env . SUPABASE_ANON_KEY
714
815 if ( ! url || ! key ) {
9- return json ( { error : 'Missing Supabase URL or key' } , 500 )
16+ return json ( { success : false , error : 'Missing Supabase URL or key' } , 500 )
1017 }
1118
1219 const supabase = createClient ( url , key , {
@@ -20,11 +27,19 @@ export const action: ActionFunction = async ({ request }) => {
2027 try {
2128 const body = await request . formData ( )
2229
23- const res = await supabase . from ( 'feedback' ) . insert ( {
30+ const data = {
2431 feedback : body . get ( 'feedback' ) ,
2532 page_title : body . get ( 'pageTitle' ) ,
2633 upvoted : body . get ( 'variant' ) === 'upvote' ,
27- } )
34+ }
35+
36+ const parsedSchema = schema . safeParse ( data )
37+
38+ if ( ! parsedSchema . success ) {
39+ return json ( { success : false , error : 'Feedback is required' } , 405 )
40+ }
41+
42+ const res = await supabase . from ( 'feedback' ) . insert ( parsedSchema . data )
2843
2944 console . log ( 'SUPABASE RESPONSE' , res )
3045
0 commit comments