El path a critical-bootstrap.css usaba 'css' (minúscula) pero el directorio real es 'Css' (mayúscula). Esto causaba que el CSS crítico no se cargara en producción (Linux es case-sensitive). Bug encontrado: El CriticalBootstrapService no inyectaba el CSS en producción porque file_exists() retornaba false. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Capa de Infraestructura
📋 Propósito
La Capa de Infraestructura contiene las implementaciones concretas de las interfaces definidas en el Dominio. Conecta la lógica de negocio con el mundo exterior (WordPress, MySQL, cache, HTTP).
🎯 Responsabilidades
- ✅ Implementar interfaces del Dominio
- ✅ Conectar con frameworks (WordPress)
- ✅ Persistencia (MySQL via wpdb)
- ✅ Cache (WordPress Transients)
- ✅ HTTP (AJAX endpoints)
- ✅ Contiene detalles de implementación
📦 Estructura
Infrastructure/
├── Persistence/
│ └── WordPress/
│ ├── WordPressComponentRepository.php (MySQL)
│ └── WordPressDefaultsRepository.php (Schemas)
├── Services/
│ ├── WordPressValidationService.php (Validación)
│ ├── WordPressCacheService.php (Transients)
│ ├── SchemaSyncService.php (JSON → BD)
│ └── CleanupService.php (Limpieza)
├── API/
│ └── WordPress/
│ └── AjaxController.php (Endpoints AJAX)
├── Facades/
│ └── ComponentManager.php (API unificada)
├── DI/
│ └── DIContainer.php (Dependency Injection)
└── README.md
🔌 Implementaciones
Repositories
WordPressComponentRepository
Persiste componentes en wp_roi_theme_components.
Métodos:
save(Component): INSERT o UPDATEfindByName(string): Buscar por nombrefindAll(): Obtener todosdelete(string): Eliminar
WordPressDefaultsRepository
Gestiona schemas en wp_roi_theme_defaults.
Services
WordPressValidationService
Valida datos contra schemas.
Estrategia:
- Obtener schema de BD
- Validar estructura
- Sanitizar con funciones WordPress
WordPressCacheService
Cache con WordPress Transients API.
TTL default: 1 hora (3600 segundos)
SchemaSyncService
Sincroniza schemas desde JSON a BD.
CleanupService
Elimina componentes obsoletos.
API
AjaxController
Endpoints AJAX de WordPress.
Endpoints disponibles:
roi_theme_save_component(POST)roi_theme_get_component(GET)roi_theme_delete_component(POST)roi_theme_sync_schema(POST)
Seguridad:
- Nonce verification
- Capability check (manage_options)
Facade
ComponentManager
API unificada para todo el sistema.
Uso:
$manager = new ComponentManager($container);
$result = $manager->saveComponent('top_bar', $data);
📐 Principios Arquitectónicos
Dependency Inversion
Infrastructure implementa interfaces del Domain:
class WordPressComponentRepository implements ComponentRepositoryInterface
{
// Implementación específica de WordPress
}
Separación de Concerns
- Repositories: Solo persistencia
- Services: Lógica de infraestructura
- Controller: Solo HTTP
- Facade: Orquestación simple
🧪 Testing
Tests de integración (usan BD real de WordPress):
vendor\bin\phpunit tests\Integration\Infrastructure
🔗 Referencias
- Domain Layer:
../Domain/README.md - Application Layer:
../Application/README.md