Some checks failed
ci / ci (22, ubuntu-latest) (push) Has been cancelled
Nuxt 4 + Supabase + Flightics API. Incluye búsqueda de vuelos, inspiraciones, watchlist, tracking de precios y mapa interactivo. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
38 lines
1.2 KiB
TypeScript
38 lines
1.2 KiB
TypeScript
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 query = getQuery(event)
|
|
const days = Number(query.days) || 30
|
|
|
|
const since = new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString()
|
|
|
|
const supabase = serverSupabaseServiceRole(event)
|
|
|
|
const { data: search } = await supabase
|
|
.from('tracked_searches')
|
|
.select('id')
|
|
.eq('id', id)
|
|
.eq('user_id', user.id)
|
|
.single()
|
|
|
|
if (!search) throw createError({ statusCode: 404, message: 'No encontrado' })
|
|
|
|
const { data: snapshots, error } = await supabase
|
|
.from('price_snapshots')
|
|
.select('cheapest_price, avg_price, median_price, total_results, recorded_at')
|
|
.eq('tracked_search_id', id)
|
|
.gte('recorded_at', since)
|
|
.order('recorded_at', { ascending: true })
|
|
|
|
if (error) throw createError({ statusCode: 500, message: error.message })
|
|
|
|
return snapshots || []
|
|
})
|