# US-MGN-001-003-001: CRUD de Usuarios (Crear, Listar, Editar, Desactivar) **RF Asociado:** [RF-MGN-001-003](../../02-modelado/requerimientos-funcionales/mgn-001/RF-MGN-001-003-gestion-usuarios.md) **Módulo:** MGN-001 - Fundamentos **Epic:** Gestión de Usuarios **Prioridad:** P0 (MVP) **Story Points:** 5 **Sprint:** Sprint 2 **Estado:** Ready for Development **Fecha:** 2025-11-24 --- ## User Story **Como** administrador del sistema, **Quiero** crear, listar, editar y desactivar usuarios, **Para** gestionar quién tiene acceso al sistema y con qué roles. --- ## Descripción Detallada CRUD completo de usuarios con validaciones de negocio: unicidad de email por tenant, asignación de roles, soft delete, envío de email de bienvenida. --- ## Criterios de Aceptación ### Escenario 1: Crear usuario nuevo **Dado que** soy administrador, **Cuando** creo usuario con email, nombre, contraseña y roles, **Entonces** usuario se crea con password hasheado, email de bienvenida enviado. ### Escenario 2: Email duplicado **Dado que** email ya existe en el tenant, **Cuando** intento crear usuario, **Entonces** retorna error 400 "Email ya registrado". ### Escenario 3: Listar usuarios con filtros **Dado que** existen múltiples usuarios, **Cuando** listo con filtros (nombre, email, rol, status), **Entonces** veo resultados paginados con rol y status. ### Escenario 4: Editar usuario **Dado que** un usuario existe, **Cuando** edito nombre, teléfono, roles, **Entonces** cambios se aplican inmediatamente. ### Escenario 5: Desactivar usuario (soft delete) **Dado que** usuario está activo, **Cuando** lo desactivo, **Entonces** status='inactive', tokens revocados, no puede login. --- ## Reglas de Negocio - **RN-1:** Email único por tenant - **RN-2:** Contraseña hasheada con bcrypt (cost 12) - **RN-3:** Soft delete (status='inactive', deleted_at) - **RN-4:** Al desactivar: revocar tokens activos - **RN-5:** No se puede auto-desactivar (el admin no puede desactivarse a sí mismo) --- ## Tareas Técnicas ### Backend - [ ] POST /api/v1/auth/users - Crear usuario - [ ] GET /api/v1/auth/users - Listar con paginación/filtros - [ ] GET /api/v1/auth/users/:id - Detalle usuario - [ ] PATCH /api/v1/auth/users/:id - Actualizar - [ ] DELETE /api/v1/auth/users/:id - Soft delete - [ ] UsersService.create/findAll/update/deactivate - [ ] CreateUserDto, UpdateUserDto con validaciones - [ ] Enviar email de bienvenida (SendGrid/SES) - [ ] Unit + Integration tests (12 casos) ### Frontend - [ ] UsersListPage con tabla paginada - [ ] UserFormModal (crear/editar) - [ ] Filtros: búsqueda, rol, status - [ ] Confirmación antes de desactivar - [ ] API client + React Query - [ ] Component + E2E tests ### Database - [ ] Tabla: auth.users (validar schema) - [ ] Índice: idx_users_email_tenant (UNIQUE) - [ ] Trigger: revocar tokens al desactivar --- ## Estimación: 5 SP (9 horas) --- ## Definition of Done - [ ] CRUD implementado (backend + frontend) - [ ] Tests pasando (>80% cobertura) - [ ] Email de bienvenida funcionando - [ ] Soft delete funcionando - [ ] Code review aprobado - [ ] Merge a develop --- ## Referencias - [RF-MGN-001-003](../../02-modelado/requerimientos-funcionales/mgn-001/RF-MGN-001-003-gestion-usuarios.md) - [ET-BACKEND-MGN-001-003](../../02-modelado/especificaciones-tecnicas/backend/mgn-001/ET-BACKEND-MGN-001-003-gestion-usuarios.md) - [ET-FRONTEND-MGN-001-003](../../02-modelado/especificaciones-tecnicas/frontend/mgn-001/ET-FRONTEND-MGN-001-003-gestion-usuarios.md)