feat: add on-booking-created and on-inquiry-created Edge Functions with DB-trigger wiring
Wires pg_net-based database triggers on bookings/inquiries to invoke the two Edge Functions on insert. Two empirically-discovered fixes over the brief's literal SQL were required to make this work locally: - ALTER DATABASE ... SET for a custom GUC needs superuser, but the local migration role (postgres) isn't superuser in this Supabase CLI stack (only supabase_admin is) - inlined the base URL as a literal constant in each trigger function instead. - pg_net's http_post lives in schema `net`, not `extensions.net` - fixed the function calls accordingly. Also disabled verify_jwt for both functions in config.toml since they're invoked by pg_net (no Authorization header), not by end-user clients. Claude-Session: https://claude.ai/code/session_01NhxA4npAXAxmCDEJt6kxSH
This commit is contained in:
38
supabase/functions/on-inquiry-created/index.ts
Normal file
38
supabase/functions/on-inquiry-created/index.ts
Normal file
@@ -0,0 +1,38 @@
|
||||
import { createClient } from 'jsr:@supabase/supabase-js@2'
|
||||
import { buildInquiryNotificationEmail } from '../_shared/email.ts'
|
||||
|
||||
const FROM_ADDRESS = 'bookings@braidsbymira.com'
|
||||
const MIRA_EMAIL = 'hello@braidsbymira.com'
|
||||
|
||||
Deno.serve(async (req) => {
|
||||
const payload = await req.json()
|
||||
const inquiry = payload.record
|
||||
|
||||
const supabaseAdmin = createClient(
|
||||
Deno.env.get('SUPABASE_URL')!,
|
||||
Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!,
|
||||
)
|
||||
|
||||
const { data: product } = await supabaseAdmin
|
||||
.from('products')
|
||||
.select('name')
|
||||
.eq('id', inquiry.product_id)
|
||||
.single()
|
||||
|
||||
const { subject, html } = buildInquiryNotificationEmail({
|
||||
productName: product?.name ?? inquiry.product_id,
|
||||
contact: { name: inquiry.contact_name, email: inquiry.contact_email, notes: inquiry.contact_notes },
|
||||
})
|
||||
|
||||
const resendApiKey = Deno.env.get('RESEND_API_KEY')
|
||||
await fetch('https://api.resend.com/emails', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
Authorization: `Bearer ${resendApiKey}`,
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({ from: FROM_ADDRESS, to: MIRA_EMAIL, subject, html }),
|
||||
})
|
||||
|
||||
return new Response(JSON.stringify({ ok: true }), { headers: { 'Content-Type': 'application/json' } })
|
||||
})
|
||||
Reference in New Issue
Block a user