Cómo eliminar una marca virtual
Borra de forma definitiva una marca virtual temporal desde la tabla `Marcas virtuales` de una ubicación, con confirmación previa y refresco automático de la lista.
En este artículo
Este flujo sirve para retirar marcas temporales o descartables del TPV de una ubicación, como Marea Gran Via, sin tocar marcas principales del demo.
La acción requiere `brand:manage`, pasa por un modal destructivo y elimina la fila `virtual_brand`. No hay paso de deshacer en la interfaz revisada.
Antes de empezar
- Sesión iniciada con organización activa, por ejemplo Grupo Marea Demo.
- Ubicación activa con acceso a `${APP_DEEPLINK_BASE}${ORG_ID}/${LOCATION_ID}/location/brands`, por ejemplo Marea Gran Via.
- Permiso `brand:manage` en el ámbito correspondiente. Con solo `brand:view` se puede ver la lista, pero no aparece `Eliminar`.
- Debe existir una marca virtual temporal en el mismo contexto de la ruta, por ejemplo `00 Marca temporal docs`. Para capturas o prácticas, no borrar la marca principal del demo.
Instrucciones
- 1.
Abrir Marcas virtuales
Entra en `${APP_DEEPLINK_BASE}${ORG_ID}/${LOCATION_ID}/location/brands`. La pantalla carga la tabla `Marcas virtuales` de la ubicación y muestra las marcas disponibles para Marea Gran Via.
- 2.
Seleccionar la marca temporal
Localiza la marca temporal preparada para documentación, abre el menú de acciones de su fila y elige `Eliminar`. La aplicación abre una confirmación antes de ejecutar el borrado.
- 3.
Confirmar el borrado
Confirma la eliminación en el modal. La aplicación envía un `DELETE` sin cuerpo para el identificador de la marca seleccionada.
- 4.
Comprobar la lista refrescada
Tras la respuesta correcta del servidor, el modal se cierra, la lista de `virtual-brands` se invalida y la marca temporal deja de aparecer en la tabla.
Validaciones y límites
- `brand:manage` es obligatorio: la UI oculta la acción destructiva sin ese permiso y el backend vuelve a comprobarlo antes de borrar.
- El `id` de marca es obligatorio como segmento de ruta; la petición `DELETE` no usa payload JSON.
- Si el `id` está vacío, no existe o pertenece a otro contexto, la operación se trata como no encontrada.
- La ruta de ubicación no borra marcas de organización y la ruta de organización no borra marcas de ubicación.
- El éxito devuelve `204 No Content`, no un objeto `VirtualBrand`.
- El borrado es físico: elimina la fila `virtual_brand` y no hay deshacer en la implementación revisada.
- Si la marca estaba guardada como `tpv_settings.brand_id`, PostgreSQL deja esa referencia en `NULL`.
- Los archivos asociados a la marca no se eliminan con esta acción; solo desaparece la fila que los referenciaba.
- No se encontró una pantalla app-native dedicada para borrar marcas virtuales de organización, aunque existe endpoint de organización.
Resultado esperado
La marca virtual temporal queda eliminada del contexto de la ubicación, la tabla se recarga sin esa fila y cualquier referencia de TPV a esa marca puede quedar en `NULL` a nivel de base de datos.