- Implementado soft delete para preguntas
- Nuevas columnas: is_deleted (boolean), updated_at (timestamp)
- Migración SQL: add_soft_delete_to_questions.sql
- Endpoint DELETE marca preguntas como eliminadas en lugar de borrarlas
- GET /api/checklists/{id} filtra preguntas eliminadas (is_deleted=false)
- Validación de subpreguntas activas antes de eliminar
- Índices agregados para optimizar queries
- Mantiene integridad de respuestas históricas y PDFs generados
- Permite limpiar checklists sin afectar inspecciones completadas
26 lines
1.3 KiB
SQL
26 lines
1.3 KiB
SQL
-- Migración: Agregar soft delete a preguntas
|
|
-- Fecha: 2025-11-27
|
|
-- Descripción: Permite eliminar preguntas sin romper la integridad de respuestas históricas
|
|
|
|
-- Agregar columna is_deleted a la tabla questions
|
|
ALTER TABLE questions ADD COLUMN IF NOT EXISTS is_deleted BOOLEAN DEFAULT FALSE;
|
|
|
|
-- Agregar columna updated_at si no existe
|
|
ALTER TABLE questions ADD COLUMN IF NOT EXISTS updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW();
|
|
|
|
-- Crear índice para mejorar queries que filtran por is_deleted
|
|
CREATE INDEX IF NOT EXISTS idx_questions_is_deleted ON questions(is_deleted);
|
|
|
|
-- Crear índice compuesto para mejorar queries de preguntas activas por checklist
|
|
CREATE INDEX IF NOT EXISTS idx_questions_checklist_active ON questions(checklist_id, is_deleted);
|
|
|
|
-- Actualizar preguntas existentes como no eliminadas
|
|
UPDATE questions SET is_deleted = FALSE WHERE is_deleted IS NULL;
|
|
|
|
-- Actualizar updated_at en preguntas existentes
|
|
UPDATE questions SET updated_at = created_at WHERE updated_at IS NULL;
|
|
|
|
-- Comentarios en las columnas
|
|
COMMENT ON COLUMN questions.is_deleted IS 'Soft delete: marca pregunta como eliminada sin borrarla físicamente, manteniendo integridad de respuestas históricas';
|
|
COMMENT ON COLUMN questions.updated_at IS 'Timestamp de última actualización de la pregunta';
|