import { serverSupabaseServiceRole, serverSupabaseClient } from '#supabase/server' export default defineEventHandler(async (event) => { const client = await serverSupabaseClient(event) const { data: { user } } = await client.auth.getUser() if (!user) throw createError({ statusCode: 401, message: 'No autenticado' }) const id = getRouterParam(event, 'id') if (!id) throw createError({ statusCode: 400, message: 'ID requerido' }) const body = await readBody(event) const allowed = ['name', 'interval_hours', 'is_active', 'expires_at', 'search_params', 'route_summary'] const patch: Record = {} for (const key of allowed) { if (body[key] !== undefined) patch[key] = body[key] } if (patch.interval_hours) { patch.interval_hours = Math.min(Math.max(patch.interval_hours as number, 6), 168) } if (Object.keys(patch).length === 0) { throw createError({ statusCode: 400, message: 'Nada que actualizar' }) } // Si cambian los parametros de busqueda, forzar ejecucion inmediata if (patch.search_params) { patch.next_run_at = new Date().toISOString() } const supabase = serverSupabaseServiceRole(event) const { data, error } = await supabase .from('tracked_searches') .update(patch as never) .eq('id', id) .eq('user_id', user.id) .select() .single() if (error) throw createError({ statusCode: 500, message: error.message }) if (!data) throw createError({ statusCode: 404, message: 'Busqueda no encontrada' }) return data })