import { MigrationInterface, QueryRunner } from 'typeorm'; export class F4CompanySignatureInvites1790000200000 implements MigrationInterface { name = 'F4CompanySignatureInvites1790000200000'; public async up(queryRunner: QueryRunner): Promise { await queryRunner.query(` CREATE TABLE inspection_act_company_signature_invites ( id uuid PRIMARY KEY DEFAULT gen_random_uuid(), act_id uuid NOT NULL, token_sha256 char(64) NOT NULL UNIQUE, recipient_email varchar(320) NOT NULL, recipient_name varchar(200), recipient_document_type varchar(20), recipient_document_number varchar(40), recipient_position varchar(200), status varchar(20) NOT NULL DEFAULT 'PENDING', expires_at timestamptz NOT NULL, sent_at timestamptz, used_at timestamptz, revoked_at timestamptz, created_by uuid NOT NULL, revoked_by uuid, created_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT fk_company_signature_invite_act FOREIGN KEY (act_id) REFERENCES inspection_acts(id) ON DELETE CASCADE, CONSTRAINT fk_company_signature_invite_created_by FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE RESTRICT, CONSTRAINT fk_company_signature_invite_revoked_by FOREIGN KEY (revoked_by) REFERENCES users(id) ON DELETE SET NULL, CONSTRAINT chk_company_signature_invite_status CHECK ( status IN ('PENDING','USED','REVOKED','EXPIRED') ) ) `); await queryRunner.query(` CREATE INDEX idx_company_signature_invites_act_created ON inspection_act_company_signature_invites(act_id,created_at DESC) `); await queryRunner.query(` CREATE INDEX idx_company_signature_invites_pending_expiry ON inspection_act_company_signature_invites(status,expires_at) WHERE status='PENDING' `); } public async down(queryRunner: QueryRunner): Promise { await queryRunner.query('DROP TABLE IF EXISTS inspection_act_company_signature_invites'); } }