Skip to content

feat(mesas): cada mesa tiene su mesera, y se reparten desde Personal - #35

Merged
davidpp09 merged 3 commits into
mainfrom
feat/mesas-asignadas-a-meseras
Oct 3, 2026
Merged

davidpp09 merged 3 commits into
mainfrom
feat/mesas-asignadas-a-meseras

Conversation

@davidpp09

@davidpp09 davidpp09 commented Oct 3, 2026 •

Copy link
Copy Markdown
Owner

Qué resuelve

La mesera solo tenía un número de sección (1, 2 o 3), y el reparto sección → mesas estaba quemado en el frontend (1-15, 16-30, 31-50). Con eso no se podía dar de alta una mesera con mesas propias, la mesa 51 no le aparecía a nadie, y repartir distinto exigía desplegar.

Cambios

  • V8: mesas.id_usuario_asignado, mesas.activa (baja lógica) y UNIQUE en mesas.numero. Copia el reparto actual, así que el día del deploy cada mesera ve sus mismas mesas.
  • abrirCuenta rechaza que una mesera abra una mesa que no es suya (ADMIN/DEV abren cualquiera).
  • GET /mesas/mias: sus mesas más las que tienen una cuenta abierta por ella, para que pueda cobrar aunque la mesa se reasigne en pleno servicio.
  • Gestión (solo ADMIN/DEV): GET /mesas/gestion, POST /mesas, PUT /mesas/{id}, DELETE /mesas/{id}, PUT /mesas/{id}/activar, PUT /mesas/asignacion, POST /mesas/cubrir-turno.
  • GET /usuarios/todos (activos y dados de baja, sin paginar) y GET /usuarios/{id}/ventas (hoy, semana y mes; mismo criterio que el corte).
  • Dar de baja a una mesera, o quitarle el rol MESERO, deja sus mesas sin asignar.
  • Permiso corregido: cualquier MESERO podía crear mesas (el POST heredaba el permiso de la clase).

/mesas/rango se queda para el frontend viejo. Todas las rutas cuelgan de /mesas* y /usuarios*, que Caddy ya proxea.

Pruebas

  • 120 tests en verde: MesaServiceTest, PermisosMesasTest, PermisosUsuariosTest, VentasEmpleadoServiceTest y 2 casos nuevos en OrdenServiceTest.
  • V8 aplicada en un MySQL 8 de Docker con datos con la forma de producción (50 mesas, 3 meseras, 1 dada de baja): el reparto quedó 15/15/20 y la dada de baja se ignoró. Hibernate validate pasó.
  • 14 llamadas reales a las rutas nuevas con login: bloqueo de mesa ajena, 403 a la mesera, número duplicado, reasignación con cuenta abierta, cubrir turno y baja de mesera.

Deploy

Va primero que RestFoodF feat/personal-mesas-y-ficha, con el restaurante cerrado. El frontend actual sigue funcionando con este backend. Después de V8, rollback.sh ya no revierte el backend (Flyway ve V8 aplicada).

Agregado después: alta por lote

POST /mesas/lote {desde, hasta, id_usuario_asignado?} crea p. ej. de la 51 a la 65. Todo o nada: si alguna ya existe no se crea ninguna y el error dice cuáles chocan. Tope de 50 por lote. Solo ADMIN/DEV (en PermisosMesasTest). 5 tests nuevos; la suite pasa a 125.

Hasta ahora la mesera solo tenia un numero de seccion (1, 2 o 3) y la
traduccion seccion -> mesas estaba quemada en el frontend (1-15, 16-30,
31-50). No se podia dar de alta una mesera con mesas propias, la mesa 51
no le aparecia a nadie, y repartir distinto exigia desplegar.

V8 agrega mesas.id_usuario_asignado y mesas.activa, y copia el reparto
actual a la base: el dia que se despliegue cada mesera ve sus mismas
mesas. Tambien pone UNIQUE en mesas.numero.

Reglas:
- Una mesa tiene UNA mesera. Asignarla a otra se la quita a la anterior.
- abrirCuenta rechaza que una mesera abra una mesa que no es suya.
  ADMIN y DEV abren cualquiera.
- /mesas/mias devuelve las mesas asignadas MAS las que tienen una cuenta
  abierta por esa mesera, para que pueda cobrar aunque el encargado haya
  reasignado la mesa en pleno servicio.
- Dar de baja a una mesera, o quitarle el rol MESERO, deja sus mesas sin
  asignar.
- Una mesa con cuenta abierta no se da de baja (baja logica: el historial
  de ordenes se conserva).

Rutas nuevas (todas bajo /mesas y /usuarios, ya proxeadas por Caddy):
GET /mesas/mias, GET /mesas/gestion, PUT /mesas/{id}, DELETE /mesas/{id},
PUT /mesas/{id}/activar, PUT /mesas/asignacion, POST /mesas/cubrir-turno,
GET /usuarios/{id}/ventas (hoy, semana y mes; mismo criterio que el corte).

Permisos: crear mesas era posible para cualquier MESERO (el POST heredaba
el permiso de la clase). Ahora toda la gestion es solo ADMIN y DEV.

/mesas/rango se queda para el frontend anterior; se puede borrar cuando
todas las tablets hayan recargado.
…inar

El listado de Personal pedia /usuarios, que pagina de 10 en 10, y el
frontend solo leia la primera pagina: hoy hay 9 activos, el empleado 11
habria desaparecido de la pantalla sin aviso. Tampoco se veian los dados
de baja, asi que el endpoint de reactivar no tenia pantalla.

PermisosUsuariosTest vigila que lo nuevo no herede el permiso de clase,
que incluye al CAJERO.
POST /mesas/lote {desde, hasta, id_usuario_asignado?}. Todo o nada: si
alguna del rango ya existe no se crea ninguna y el error dice cuales
chocan, para no dejar el rango a medias. Tope de 50 por lote para que
un dedazo (51-650) no cree 600 mesas. Solo ADMIN y DEV.
@davidpp09
davidpp09 merged commit d1190c7 into main Oct 3, 2026
1 check passed
@davidpp09
davidpp09 deleted the feat/mesas-asignadas-a-meseras branch October 3, 2026 23:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant