Ir al contenido

Salón: mesas y sillas

El salón se compone de zonas → mesas → sillas (lugares). Cada silla es la unidad reservable.

Ventana de terminal
curl -X POST http://localhost:5000/venue/mesas \
-H 'content-type: application/json' -H "authorization: Bearer $TOKEN" \
-d '{"eventoId":"<uuid>","zonaId":"<uuid>","numero":7,"capacidad":10,"etiqueta":"Mesa del patio"}'
  • numero único por evento (409).
  • La zona debe pertenecer al mismo evento (se valida con trigger → 400).
  • esEstrategica: true marca la mesa para apartado solo por admin.

GET /venue/mesas?eventoId=… devuelve cada mesa con su zona y la ocupación agregada:

{
"items": [
{
"numero": 7,
"zona": { "clave": "VIP", "colorHex": "#A31F34" },
"ocupacion": { "total": 10, "libres": 8, "apartados": 2, "confirmados": 0, "bloqueados": 0 }
}
],
"total": 1,
"siguienteCursor": null
}

Es la base del plano y del selector de lugares.

PATCH /venue/mesas/{id} admite etiqueta, capacidad, zona, posición SVG y bloqueo. Cada PATCH incrementa version (bloqueo optimista).

Ventana de terminal
# Bloquear (mantenimiento)
curl -X PATCH http://localhost:5000/venue/mesas/{id} \
-H 'content-type: application/json' -H "authorization: Bearer $TOKEN" \
-d '{"bloqueadaMotivo":"Mantenimiento"}'
# Desbloquear: bloqueadaMotivo null
-d '{"bloqueadaMotivo":null}'

Si se bloquea con reservas vigentes, la respuesta incluye una advertencia: las vigentes se siguen honrando, el bloqueo solo frena nuevos apartados.

Otras reglas: no se puede encoger la capacidad bajo las sillas creadas (409), y DELETE /venue/mesas/{id} responde 409 si alguna silla tiene reserva vigente o la mesa tiene grupos activos.

Alta masiva con códigos auto CLAVE-MESA-SILLA (p. ej. VIP-007-03):

Ventana de terminal
curl -X POST http://localhost:5000/venue/mesas/{id}/lugares \
-H 'content-type: application/json' -H "authorization: Bearer $TOKEN" \
-d '{"numeros":[1,2,3,4,5,6,7,8,9,10]}'
  • Todo-o-nada: si una silla ya existe, la petición completa es 409.
  • GET /venue/mesas/{id}/lugares?estado=libre es el selector que usa el front para ofrecer lugares.
  • GET /venue/lugares/{id} da la ficha de la silla con el contexto de su mesa (la usa el flujo de reserva para validar).
  • DELETE /venue/lugares/{id}: 409 si la silla tiene reserva vigente.
Acción Efecto en las sillas
Apartar silla → apartado
Confirmar silla → confirmado
Expirar / cancelar / liberar silla → libre
Bloquear mesa sillas libres → bloqueado (las vigentes se honran)

Para el detalle de cada transición de reserva, ver Reservas.

→ Padrón de participantes