# US-MGN002-001: CRUD de Usuarios (Admin) ## Identificacion | Campo | Valor | |-------|-------| | **ID** | US-MGN002-001 | | **Modulo** | MGN-002 Users | | **Sprint** | Sprint 2 | | **Prioridad** | P0 - Critica | | **Story Points** | 8 | | **Estado** | Ready | | **Autor** | System | | **Fecha** | 2025-12-05 | --- ## Historia de Usuario **Como** administrador del sistema **Quiero** poder crear, ver, editar y eliminar usuarios **Para** gestionar el acceso de los empleados a la plataforma ERP --- ## Criterios de Aceptacion ### Escenario 1: Crear usuario exitosamente ```gherkin Given un administrador autenticado con permiso "users:create" When crea un usuario con: | email | nuevo@empresa.com | | firstName | Juan | | lastName | Perez | | roleIds | [admin-role-id] | Then el sistema crea el usuario con status "pending_activation" And envia email de invitacion al usuario And responde con status 201 And el body contiene el usuario creado sin password ``` ### Escenario 2: Listar usuarios con paginacion ```gherkin Given 50 usuarios en el tenant actual When el admin solicita GET /api/v1/users?page=2&limit=10 Then el sistema retorna usuarios 11-20 And incluye meta con total, pages, hasNext, hasPrev ``` ### Escenario 3: Buscar usuarios por texto ```gherkin Given usuarios con nombres "Juan", "Juana", "Pedro" When el admin busca con search="juan" Then el sistema retorna "Juan" y "Juana" And no retorna "Pedro" ``` ### Escenario 4: Soft delete de usuario ```gherkin Given un usuario activo con id "user-123" When el admin elimina el usuario Then el campo deleted_at se establece And el campo deleted_by tiene el ID del admin And el usuario no aparece en listados And el usuario no puede hacer login ``` ### Escenario 5: No puede eliminarse a si mismo ```gherkin Given un admin con id "admin-123" When intenta eliminar su propio usuario Then el sistema responde con status 400 And el mensaje es "No puedes eliminarte a ti mismo" ``` --- ## Mockup / Wireframe ``` +------------------------------------------------------------------+ | [Logo] Usuarios [+ Nuevo Usuario] | +------------------------------------------------------------------+ | Buscar: [___________________] [Filtros ▼] | +------------------------------------------------------------------+ | ☐ | Avatar | Nombre | Email | Estado | Roles | |---|--------|---------------|--------------------|---------|----- | | ☐ | 👤 | Juan Perez | juan@empresa.com | Activo | Admin| | ☐ | 👤 | Maria Lopez | maria@empresa.com | Activo | User | | ☐ | 👤 | Pedro Garcia | pedro@empresa.com | Inactivo| User | +------------------------------------------------------------------+ | Mostrando 1-10 de 50 [< Anterior] [Siguiente >]| +------------------------------------------------------------------+ Modal: Crear Usuario ┌──────────────────────────────────────────────────────────────────┐ │ NUEVO USUARIO │ ├──────────────────────────────────────────────────────────────────┤ │ Email* [_______________________________] │ │ Nombre* [_______________________________] │ │ Apellido* [_______________________________] │ │ Telefono [_______________________________] │ │ Roles [Select roles... ▼] │ │ ☑ Admin ☐ Manager ☐ User │ │ │ │ [ Cancelar ] [ Crear Usuario ] │ └──────────────────────────────────────────────────────────────────┘ ``` --- ## Notas Tecnicas ### API Endpoints ```typescript // Crear usuario POST /api/v1/users { "email": "nuevo@empresa.com", "firstName": "Juan", "lastName": "Perez", "phone": "+521234567890", "roleIds": ["role-uuid"] } // Response 201 { "id": "user-uuid", "email": "nuevo@empresa.com", "firstName": "Juan", "lastName": "Perez", "status": "pending_activation", "isActive": false, "createdAt": "2025-12-05T10:00:00Z", "roles": [{ "id": "role-uuid", "name": "admin" }] } // Listar usuarios GET /api/v1/users?page=1&limit=20&search=juan&status=active&sortBy=createdAt&sortOrder=DESC // Response 200 { "data": [...], "meta": { "total": 50, "page": 1, "limit": 20, "totalPages": 3, "hasNext": true, "hasPrev": false } } ``` ### Permisos Requeridos | Accion | Permiso | |--------|---------| | Crear | users:create | | Listar | users:read | | Ver detalle | users:read | | Actualizar | users:update | | Eliminar | users:delete | | Activar/Desactivar | users:update | --- ## Definicion de Done - [ ] Endpoint POST /api/v1/users implementado - [ ] Endpoint GET /api/v1/users con paginacion y filtros - [ ] Endpoint GET /api/v1/users/:id - [ ] Endpoint PATCH /api/v1/users/:id - [ ] Endpoint DELETE /api/v1/users/:id (soft delete) - [ ] Validaciones de permisos (RBAC) - [ ] Email de invitacion enviado - [ ] Frontend: UsersListPage con tabla - [ ] Frontend: Modal crear/editar usuario - [ ] Tests unitarios (>80% coverage) - [ ] Tests e2e pasando - [ ] Code review aprobado --- ## Dependencias | ID | Descripcion | |----|-------------| | RF-AUTH-001 | Login para autenticacion | | RF-ROLE-001 | Roles para asignacion | | EmailService | Para enviar invitaciones | --- ## Estimacion | Tarea | Horas | |-------|-------| | Backend: CRUD endpoints | 6h | | Backend: Paginacion y filtros | 3h | | Backend: Tests | 3h | | Frontend: UsersListPage | 4h | | Frontend: UserForm modal | 3h | | Frontend: Tests | 2h | | **Total** | **21h** | --- ## Historial | Version | Fecha | Autor | Cambios | |---------|-------|-------|---------| | 1.0 | 2025-12-05 | System | Creacion inicial |