import type { APIRoute } from 'astro'; export const prerender = false; export const POST: APIRoute = async ({ request, locals }) => { const user = locals.user; if (!user) { return Response.json({ error: 'No autenticado' }, { status: 401 }); } let body: { material_id?: unknown; cantidad?: unknown; notas?: unknown }; try { body = await request.json(); } catch { return Response.json({ error: 'JSON inválido' }, { status: 400 }); } const material_id = Number(body.material_id); const cantidad = Number(body.cantidad); const notas = typeof body.notas === 'string' && body.notas.trim() ? body.notas.trim() : null; if (!Number.isInteger(material_id) || material_id <= 0) { return Response.json({ error: 'material_id requerido' }, { status: 400 }); } if (!Number.isInteger(cantidad) || cantidad <= 0) { return Response.json({ error: 'cantidad debe ser un entero mayor que cero' }, { status: 400 }); } const supabase = locals.supabase; const { data: material, error: matErr } = await supabase .from('materiales') .select('id, cantidad_disponible, estado') .eq('id', material_id) .maybeSingle(); if (matErr) { return Response.json({ error: 'No se pudo verificar el material' }, { status: 500 }); } if (!material || material.estado !== 'disponible') { return Response.json({ error: 'Material no disponible' }, { status: 404 }); } if (material.cantidad_disponible < cantidad) { return Response.json({ error: 'Sin stock suficiente' }, { status: 409 }); } const { data, error } = await supabase .from('prestamos') .insert({ alumno_id: user.id, material_id, cantidad, notas }) .select('id') .single(); if (error) { return Response.json({ error: 'No se pudo registrar la solicitud' }, { status: 500 }); } return Response.json({ id: data.id }, { status: 201 }); };