<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
final class Version20251027180533 extends AbstractMigration
{
public function getDescription(): string
{
return 'Crea tabla manual con secuencia manual_id_seq, default de id y índice único (product_id, name).';
}
public function up(Schema $schema): void
{
// Si existía una secuencia vieja, elimínala sin fallar si no existe
$this->addSql(<<<'SQL'
DROP SEQUENCE IF EXISTS public.order_manual_id_seq CASCADE
SQL);
// Crea la secuencia para manual.id (si no existe)
$this->addSql(<<<'SQL'
CREATE SEQUENCE IF NOT EXISTS public.manual_id_seq
INCREMENT BY 1 MINVALUE 1 START 1
SQL);
// Crea la tabla manual
$this->addSql(<<<'SQL'
CREATE TABLE IF NOT EXISTS public.manual (
id INT NOT NULL,
product_id INT NOT NULL,
name VARCHAR(30) NOT NULL,
version VARCHAR(15) DEFAULT '0.0.0' NOT NULL,
created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL,
updated_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL,
PRIMARY KEY(id)
)
SQL);
// Vincula la secuencia a la columna y establece el DEFAULT
$this->addSql(<<<'SQL'
ALTER SEQUENCE public.manual_id_seq OWNED BY public.manual.id
SQL);
$this->addSql(<<<'SQL'
ALTER TABLE public.manual
ALTER COLUMN id SET DEFAULT nextval('public.manual_id_seq')
SQL);
// Índice único por (product_id, name)
$this->addSql(<<<'SQL'
CREATE UNIQUE INDEX IF NOT EXISTS unique_manual_per_product
ON public.manual (product_id, name)
SQL);
}
public function down(Schema $schema): void
{
// Revierte índice único
$this->addSql(<<<'SQL'
DROP INDEX IF EXISTS public.unique_manual_per_product
SQL);
// Revierte default y borra tabla
$this->addSql(<<<'SQL'
ALTER TABLE IF EXISTS public.manual
ALTER COLUMN id DROP DEFAULT
SQL);
$this->addSql(<<<'SQL'
DROP TABLE IF EXISTS public.manual
SQL);
// Borra la secuencia creada por esta migración
$this->addSql(<<<'SQL'
DROP SEQUENCE IF EXISTS public.manual_id_seq CASCADE
SQL);
//-- Opcional: si necesitas dejar la secuencia antigua como estaba:
$this->addSql(<<<'SQL'
CREATE SEQUENCE IF NOT EXISTS public.order_manual_id_seq
INCREMENT BY 1 MINVALUE 1 START 1
SQL);
}
}