50 lines
3.1 KiB
SQL
50 lines
3.1 KiB
SQL
-- ============================================================
|
|
-- Migration: 05_terms_acceptance
|
|
-- Sistema de aceptación de términos y condiciones
|
|
-- ============================================================
|
|
|
|
-- Tabla de versiones de términos (cada vez que cambia el documento)
|
|
CREATE TABLE IF NOT EXISTS `terms_versions` (
|
|
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
|
`version` VARCHAR(50) NOT NULL COMMENT 'Ej: 1.0, 2.0, 2026-03',
|
|
`documento_url` VARCHAR(500) DEFAULT NULL COMMENT 'URL pública del documento PDF',
|
|
`documento_nombre` VARCHAR(255) DEFAULT NULL COMMENT 'Nombre original del archivo',
|
|
`mensaje_aceptacion` TEXT NOT NULL COMMENT 'Mensaje que se envía al usuario para aceptar',
|
|
`mensaje_rechazo` TEXT NOT NULL COMMENT 'Mensaje que se envía si el usuario rechaza',
|
|
`forzar_reenvio` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 = reenviar a todos los usuarios aunque ya aceptaron',
|
|
`activa` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '1 = es la versión vigente',
|
|
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_activa` (`activa`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
-- Tabla de aceptaciones de usuarios
|
|
CREATE TABLE IF NOT EXISTS `terms_acceptance` (
|
|
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
|
`user_id` INT(11) NOT NULL COMMENT 'FK a users.id',
|
|
`terms_version_id` INT(11) NOT NULL COMMENT 'FK a terms_versions.id',
|
|
`phone_number` VARCHAR(20) NOT NULL COMMENT 'Copia desnormalizada para auditoría',
|
|
`estado` ENUM('pendiente','aceptado','rechazado') NOT NULL DEFAULT 'pendiente',
|
|
`fecha_envio` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Cuando se envió el mensaje de términos',
|
|
`fecha_respuesta` TIMESTAMP NULL DEFAULT NULL COMMENT 'Cuando el usuario respondió',
|
|
`ip_referencia` VARCHAR(45) DEFAULT NULL COMMENT 'IP del webhook si disponible',
|
|
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_user_version` (`user_id`, `terms_version_id`),
|
|
KEY `idx_estado` (`estado`),
|
|
KEY `idx_phone` (`phone_number`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
-- Columna en users para saber si está esperando respuesta de términos
|
|
ALTER TABLE `users`
|
|
ADD COLUMN IF NOT EXISTS `terms_pending` TINYINT(1) NOT NULL DEFAULT 0
|
|
COMMENT '1 = se enviaron términos y se espera respuesta'
|
|
AFTER `welcome_sent_at`,
|
|
ADD COLUMN IF NOT EXISTS `terms_accepted_at` TIMESTAMP NULL DEFAULT NULL
|
|
COMMENT 'Última vez que aceptó los términos vigentes'
|
|
AFTER `terms_pending`,
|
|
ADD COLUMN IF NOT EXISTS `terms_version_id` INT(11) NULL DEFAULT NULL
|
|
COMMENT 'Versión de términos que aceptó'
|
|
AFTER `terms_accepted_at`;
|