# Wizards 2 y 3 — DB Migration y Module Manager

> Completada: 2026-04-23

## Objetivo

Implementar Wizard 2 (migración de BD) y Wizard 3 (gestión de módulos) como componentes Livewire dentro del módulo Core, siguiendo el patrón de arquitectura establecido en Fase 1.

---

## Wizard 2 — Migración de base de datos

**Archivos:**
- `Modules/Core/Http/Livewire/DbMigrationWizard.php`
- `Modules/Core/Resources/views/livewire/db-migration-wizard.blade.php`
- `Modules/Core/Resources/views/DbMigration/DbMigrationIndex.blade.php` (wrapper)
- Ruta: `GET /DbMigration` → `db_migration.index`

### Flujo de pasos

| Paso | Key | Descripción |
|---|---|---|
| 1 | `type` | Selección de tipo: cambiar conexión / instalación limpia |
| 2 | `connection` | Formulario de conexión con botón "probar" vía PDO directo |
| 3 | `options` | Opción de migrar datos existentes |
| 4 | `run` | Ejecutar `migrate` en conexión temporal con output visible |
| 5 | `complete` | Resultado final |

### Características

- Prueba de conexión con PDO antes de permitir avanzar
- Conexión temporal (`migration_target`) que se purga al terminar
- Para tipo `connection`: actualiza `.env` y ejecuta `config:clear` al completar
- Contraseña se limpia en `finally` (no queda en memoria ni en vistas)

### Integración

- `core::livewire.db-migration-wizard` como alias de vista
- Componente: `core.db-migration-wizard` via `Livewire::componentNamespace`
- Permiso `db_migration` agregado a `Modules/Core/module.json`

---

## Wizard 3 — Gestión de módulos

**Archivos:**
- `Modules/Core/Http/Livewire/ModuleManager.php`
- `Modules/Core/Resources/views/livewire/module-manager.blade.php`
- `Modules/Core/Resources/views/ModuleManager/ModuleManagerIndex.blade.php` (wrapper)
- `app/Models/ModuleState.php`
- `database/migrations/2026_04_23_100000_create_module_states_table.php`
- Ruta: `GET /Modules` → `module_manager.index`

### Características

- Lista todos los módulos desde `Modules/*/module.json`
- Estado `enabled_runtime` resuelto: `core: true` → siempre activo, luego BD, luego `module.json`
- Toggle con validación de dependencias bidireccional:
  - Al deshabilitar: verifica que ningún módulo activo lo requiera
  - Al habilitar: verifica que todos sus `requires` estén activos
- Al activar: ejecuta `php artisan migrate --force` para correr migraciones pendientes
- Core aparece sin toggle ("siempre activo")
- try/catch en `loadModules()` protege contra tabla `module_states` inexistente (pre-instalación)

### Tabla `module_states`

```
module_id (string, PK)
enabled (boolean)
updated_at (timestamp, nullable)
```

Sin `created_at` — registro mínimo de estado por módulo.

---

## Cambios adicionales

- `Modules/Core/module.json`: agregado `db_migration` al array `permissions`
- `Modules/Core/pages.json`: agregadas entradas para `DB Migration` y `Modules` (ya existía `Wizard`)
