Rename folders to match PHP PSR-4 autoloading conventions: - schemas → Schemas - shared → Shared - Wordpress → WordPress (in all locations) Fixes deployment issues on Linux servers where filesystem is case-sensitive. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
134 lines
3.2 KiB
Markdown
134 lines
3.2 KiB
Markdown
# 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 UPDATE
|
|
- `findByName(string)`: Buscar por nombre
|
|
- `findAll()`: Obtener todos
|
|
- `delete(string)`: Eliminar
|
|
|
|
#### WordPressDefaultsRepository
|
|
Gestiona schemas en `wp_roi_theme_defaults`.
|
|
|
|
### Services
|
|
|
|
#### WordPressValidationService
|
|
Valida datos contra schemas.
|
|
|
|
**Estrategia**:
|
|
1. Obtener schema de BD
|
|
2. Validar estructura
|
|
3. 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**:
|
|
```php
|
|
$manager = new ComponentManager($container);
|
|
$result = $manager->saveComponent('top_bar', $data);
|
|
```
|
|
|
|
## 📐 Principios Arquitectónicos
|
|
|
|
### Dependency Inversion
|
|
|
|
Infrastructure implementa interfaces del Domain:
|
|
|
|
```php
|
|
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):
|
|
|
|
```bash
|
|
vendor\bin\phpunit tests\Integration\Infrastructure
|
|
```
|
|
|
|
## 🔗 Referencias
|
|
|
|
- Domain Layer: `../Domain/README.md`
|
|
- Application Layer: `../Application/README.md`
|