Responder invitación de organización
Acepta o rechaza tu propia invitación a Grupo Marea Demo desde Notificaciones. Al aceptar se activa la organización y se aceptan invitaciones pendientes a sus ubicaciones; al rechazar se limpian la invitación y los accesos pendientes relacionados.
En este artículo
Las invitaciones de organización son un flujo personal de acceso: el usuario autenticado decide si entra en la organización, sin que este formulario permita actuar por otra persona.
La acción se resuelve desde Notificaciones: abrir el menú de usuario, revisar la invitación a Grupo Marea Demo y elegir Aceptar o Rechazar. La API responde `204 No Content`; el resultado visible llega al recargar notificaciones, organizaciones y ubicaciones.
Aceptar también acepta invitaciones pendientes a ubicaciones de la misma organización, como Marea Gran Via o Marea Mercado si estaban invitadas. Rechazar elimina esas invitaciones pendientes en lugar de guardar `rejected` como estado de membresía.
Antes de empezar
- El usuario invitado ha iniciado sesión con una sesión válida o token bearer en `/api/app`.
- Existe una membresía `user_organizations` para el usuario autenticado y la organización objetivo, normalmente con `status='invited'`.
- Notificaciones contiene una `user_notifications.type='organization_invite'` asociada a ese usuario y a Grupo Marea Demo.
- Para documentar la cascada a ubicaciones, el runtime de documentación puede incluir `user_locations` pendientes para Marea Gran Via o Marea Mercado bajo la misma organización.
- Las capturas deben usar un fixture temporal del runtime ES; no se debe usar un rechazo real sobre el acceso principal del usuario demo.
Instrucciones
- 1.
Abre Notificaciones
Desde `/profile` o cualquier pantalla con menú de cuenta, abre Notificaciones. El panel carga las notificaciones personales y debe mostrar la invitación de Grupo Marea Demo con las acciones Ver, Aceptar y Rechazar.
- 2.
Revisa la organización invitada
Comprueba que la tarjeta pertenece a Grupo Marea Demo antes de responder. Ver solo abre el destino de la notificación; no acepta ni rechaza la invitación.
- 3.
Acepta la invitación
Pulsa Aceptar y confirma el modal Aceptar invitación. La aplicación envía `status='accepted'` a `PUT /api/app/me/organizations/{orgId}`; después refresca notificaciones, organizaciones y ubicaciones para que el acceso aceptado aparezca en la app.
- 4.
Rechaza la invitación
Pulsa Rechazar y confirma el modal Rechazar invitación cuando el usuario no deba entrar en la organización. Si la membresía seguía invitada, se elimina y también se retiran las invitaciones pendientes de ubicación bajo esa organización.
- 5.
Comprueba el resultado
Tras aceptar, verifica que Grupo Marea Demo queda disponible y que Marea Gran Via o Marea Mercado aparecen si estaban invitadas. Tras rechazar, confirma que la invitación ya no aparece y que no se añade acceso a la organización.
Validaciones y límites
- La ruta operativa es `PUT /api/app/me/organizations/{orgId}`; la documentación antigua que habla de `{orgMembershipId}` no refleja el identificador usado por el backend.
- La acción es personal: el backend toma el usuario autenticado desde el contexto y no acepta `user_id` en el path ni en el body.
- El body debe ser JSON decodificable con `status`; otros métodos devuelven `405 Method Not Allowed` y JSON inválido devuelve `400`.
- `status` se recorta, se pasa a minúsculas y solo puede ser `accepted` o `rejected`.
- Debe existir la membresía `user_organizations` para el par usuario/organización; si falta el usuario, el `orgId` o la membresía, la acción falla como no encontrada.
- Aceptar cambia la organización a `accepted` cuando estaba `invited` y acepta las `user_locations` pendientes de la misma organización.
- Rechazar una membresía todavía `invited` elimina la membresía de organización y las ubicaciones pendientes relacionadas; `rejected` no se persiste como estado de membresía.
- Al aceptar o rechazar se eliminan las notificaciones `organization_invite` y `location_invite` asociadas a la misma organización.
- La API no devuelve entidad de resultado; la confirmación visual depende de la recarga de consultas del frontend.
Resultado esperado
La invitación de Grupo Marea Demo queda consumida. Aceptar activa la membresía propia y las ubicaciones invitadas de esa organización; rechazar limpia la invitación pendiente sin guardar un estado `rejected` y sin afectar a otros usuarios.