Skip to content

Commit dff2e7b

Browse files
committed
docs: parse input on action
1 parent 64f2b0d commit dff2e7b

File tree

1 file changed

+18
-3
lines changed

1 file changed

+18
-3
lines changed

docs/app/routes/api/feedback.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
import { ActionFunction, json } from '@remix-run/node'
22
import { createClient } from '@supabase/supabase-js'
3+
import z from 'zod'
34

45
export 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

Comments
 (0)