erp-core/docs/05-user-stories/mgn-001/US-MGN-001-003-001-crud-usuarios.md

3.4 KiB

US-MGN-001-003-001: CRUD de Usuarios (Crear, Listar, Editar, Desactivar)

RF Asociado: RF-MGN-001-003 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