<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Inserta datos iniciales para Rate Limiting de SearchLLM
*
* Configuración:
* - 10 peticiones por minuto
* - 3 bloqueos temporales antes de bloqueo permanente
* - 15 minutos de duración de bloqueo temporal
*/
final class Version20251002111716 extends AbstractMigration
{
public function getDescription(): string
{
return 'Inserta configuración inicial de rate limiting para endpoint /api/v1/SearchLLM/search';
}
public function up(Schema $schema): void
{
// Insertar TipoSeccion para SearchLLM
$this->addSql("
INSERT INTO tipo_seccion (endpoint, nombre, created_at, updated_at)
VALUES ('/api/v1/SearchLLM/search', 'SearchLLM', NOW(), NOW())
");
// Insertar RateLimit asociado
// 10 peticiones/60 segundos, 3 bloqueos temporales, 15 minutos de bloqueo
$this->addSql("
INSERT INTO rate_limit (tipo_seccion_id, intentos, ventana, bloqueos, tiempo_bloqueo, created_at, updated_at)
SELECT id, 10, 60, 3, 15, NOW(), NOW()
FROM tipo_seccion
WHERE nombre = 'SearchLLM'
LIMIT 1
");
}
public function down(Schema $schema): void
{
// Eliminar en orden inverso (FK constraint)
$this->addSql("
DELETE rl FROM rate_limit rl
INNER JOIN tipo_seccion ts ON rl.tipo_seccion_id = ts.id
WHERE ts.nombre = 'SearchLLM'
");
$this->addSql("
DELETE FROM tipo_seccion
WHERE nombre = 'SearchLLM'
");
}
}