Cancelación y check-in
Cancelación
POST /practica-vuelos/reservas/{codigo}/cancelar.
Reglas:
- Solo el dueño de la reserva puede cancelarla (un código ajeno responde 404, no 403 — no se revela la existencia).
- Solo reservas confirmadas; cancelar dos veces responde
La reserva ya está cancelada. - Solo si faltan más de 24 horas para el primer vuelo:
Solo puedes cancelar hasta 24 horas antes del primer vuelo.
Efectos de una cancelación exitosa:
- Estado →
cancelled(definitivo; no hay reactivación). - Los asientos de todos los tramos vuelven al inventario (sumando los pasajeros con silla, con tope en
seats_total), en la misma transacción con bloqueo de filas.
Selección de asiento
GET|POST /practica-vuelos/reservas/{codigo}/asientos.
- Derecho a elegir (
can_select_seats): reserva confirmada, sin check-in, primer vuelo en el futuro y (tarifa Full en algún tramo o extraseat_selectioncomprado o ventana de check-in abierta — entonces es gratis). - Se elige un asiento por pasajero con silla (en orden de pasajeros) sobre el vuelo de ida (mapa 30 filas × letras A–F, estilo A320). Los bebés nunca reciben asiento.
- Validaciones: asiento existente (
El asiento X no existe.), no repetido dentro de la misma selección (El asiento X está repetido.), no ocupado por otra reserva del mismo vuelo (El asiento X ya está ocupado.). - Re-elegir está permitido hasta el check-in: los asientos actuales de la propia reserva no cuentan como ocupados.
- Sin derecho, el GET responde 400 con el detalle de la reserva y el mensaje:
La selección de asiento está incluida en la tarifa Full, se puede comprar como extra, o es gratis durante el check-in (24 horas antes del vuelo).
Check-in
POST /practica-vuelos/reservas/{codigo}/checkin (también listado en /checkin con las reservas elegibles).
Reglas:
- Misma regla de propiedad (404 para códigos ajenos).
- Ventana:
[salida del primer vuelo − 24 h, salida). Antes:El check-in abre 24 horas antes del primer vuelo y cierra a la hora de salida. - Una sola vez por reserva:
Esta reserva ya hizo el check-in. - Una reserva cancelada nunca es elegible.
Efectos del check-in:
checked_in_atqueda marcado.- Los asientos ya elegidos se conservan. Cada pasajero con silla sin asiento recibe uno asignado automáticamente en orden de filas (
1A,1B, …, letras A–F), saltando los asientos ya ocupados por otros pasajeros del mismo vuelo. La asignación es determinística y nunca repite asientos. Los bebés quedan sin asiento (En regazo).
Matriz de estados visible en la UI
| Estado | Etiqueta | Acciones |
|---|---|---|
| Confirmada, > 24 h, con derecho a asientos | Confirmada |
Elegir asientos, Cancelar |
| Confirmada, > 24 h, sin derecho a asientos | Confirmada |
Cancelar |
| Confirmada, dentro de 24 h | Confirmada |
Elegir asientos (gratis), Hacer check-in |
| Check-in hecho | Check-in hecho + fecha |
Ninguna |
| Cancelada | Cancelada |
Ninguna |