Módulo: Usuarios (Admin)
Scope
| Tipo de organización | Acceso |
|---|---|
| Empresa | ✅ |
| Agencia | ✅ |
| Reclutador independiente | ❌ |
Permisos por rol
| Acción | Disponible | Permiso |
|---|---|---|
| Ver lista de usuarios | ✅ | Autenticado (admin) |
| Ver detalle de usuario | ✅ | Autenticado (admin) |
¿Qué es?
Módulo administrativo que permite ver los usuarios registrados en la plataforma. Es una vista de consulta — no permite crear ni modificar usuarios (eso se hace a través de membresías e invitaciones en el módulo de Equipo).
¿Qué puede hacer el usuario?
- Ver lista de todos los usuarios
- Ver detalle de un usuario específico (nombre, email, teléfono, website, empresa)
Flujo del usuario
1. Navega a "Usuarios" desde el menú/drawer
2. Ve lista de usuarios con nombre y email
3. Toca un usuario → ve detalle con información completa
4. Puede regresar a la lista
Reglas de negocio
- Módulo de consulta únicamente (read-only)
- No tiene paginación en la versión actual (carga todos)
- Los usuarios mostrados son los del tenant activo
Arquitectura
lib/features/users/
├── application/
│ ├── users_cubit.dart # Carga lista de usuarios
│ ├── users_state.dart # UsersStatus enum
│ ├── user_detail_cubit.dart # Carga detalle de un usuario
│ └── user_detail_state.dart
├── data/
│ ├── datasources/
│ │ └── users_remote_datasource.dart
│ ├── models/
│ │ └── user_model.dart # fromJson
│ └── repositories/
│ └── users_repository_impl.dart
├── domain/
│ ├── entities/
│ │ └── user_entity.dart # Equatable
│ ├── repositories/
│ │ └── users_repository.dart
│ └── usecases/
│ ├── get_users_usecase.dart
│ └── get_user_by_id_usecase.dart
└── presentation/
├── pages/
│ ├── users_page.dart
│ └── user_detail_page.dart
└── widgets/
└── user_list_tile.dart
Endpoints API
| Método | Endpoint | Autenticación | Descripción |
|---|---|---|---|
| GET | /users | Bearer token | Lista todos los usuarios del tenant |
| GET | /users/:id | Bearer token | Detalle de un usuario |
Entidad
UserEntity(
id: int,
name: String,
email: String,
phone: String?,
website: String?,
company: String?,
)
Registro DI
- Datasource:
LazySingleton - Repository:
LazySingleton - Use Cases:
LazySingleton(GetUsersUseCase, GetUserByIdUseCase) - Cubits:
Factory(nueva instancia por pantalla)
getIt<UsersCubit>()
getIt<UserDetailCubit>()
Localización
Usa claves l10n existentes: users, userDetail, loading, retry, errorGeneric.
Estados de la UI
UsersPage
| Estado | Comportamiento |
|---|---|
| Loading | CircularProgressIndicator |
| Success | Lista de UserListTile |
| Error | Mensaje de error + reintentar |
| Empty | Mensaje "Sin usuarios" |
UserDetailPage
| Estado | Comportamiento |
|---|---|
| Loading | CircularProgressIndicator |
| Success | Card con datos completos del usuario |
| Error | Mensaje de error + reintentar |