Salón: mesas y sillas
El salón se compone de zonas → mesas → sillas (lugares). Cada silla es la unidad reservable.
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: truemarca la mesa para apartado solo por admin.
Listado con ocupación
Sección titulada «Listado con ocupación»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.
Actualizar y bloquear
Sección titulada «Actualizar y bloquear»PATCH /venue/mesas/{id} admite etiqueta, capacidad, zona, posición SVG
y bloqueo. Cada PATCH incrementa version (bloqueo optimista).
# 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.
Sillas (lugares)
Sección titulada «Sillas (lugares)»Alta masiva con códigos auto CLAVE-MESA-SILLA (p. ej. VIP-007-03):
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=librees 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}:409si la silla tiene reserva vigente.
Relación con reservas
Sección titulada «Relación con reservas»| 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.