riseup-squad18/supabase/migrations/20251203000000_add_confirmation_status.sql
2025-12-06 19:13:27 -03:00

104 lines
3.3 KiB
SQL

-- ============================================
-- Migration: Adicionar confirmation_status
-- Data: 2025-12-03
-- ============================================
-- INSTRUÇÕES:
-- 1. Acesse https://supabase.com/dashboard
-- 2. Selecione seu projeto
-- 3. Vá em SQL Editor
-- 4. Cole este código completo
-- 5. Clique em RUN
-- ============================================
-- Verificar se a tabela appointments existe
DO $$
BEGIN
IF NOT EXISTS (
SELECT FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name = 'appointments'
) THEN
RAISE NOTICE 'AVISO: Tabela appointments não existe. Esta migration será pulada.';
RAISE NOTICE 'Execute primeiro a migration base que cria as tabelas principais.';
ELSE
-- Adicionar coluna confirmation_status
IF NOT EXISTS (
SELECT FROM information_schema.columns
WHERE table_schema = 'public'
AND table_name = 'appointments'
AND column_name = 'confirmation_status'
) THEN
ALTER TABLE appointments
ADD COLUMN confirmation_status TEXT
CHECK (confirmation_status IN ('pending', 'confirmed', 'declined'));
RAISE NOTICE '✓ Coluna confirmation_status adicionada';
ELSE
RAISE NOTICE '⊘ Coluna confirmation_status já existe';
END IF;
-- Adicionar coluna confirmed_at
IF NOT EXISTS (
SELECT FROM information_schema.columns
WHERE table_schema = 'public'
AND table_name = 'appointments'
AND column_name = 'confirmed_at'
) THEN
ALTER TABLE appointments
ADD COLUMN confirmed_at TIMESTAMPTZ;
RAISE NOTICE '✓ Coluna confirmed_at adicionada';
ELSE
RAISE NOTICE '⊘ Coluna confirmed_at já existe';
END IF;
-- Adicionar comentários
COMMENT ON COLUMN appointments.confirmation_status IS
'Status de confirmação de presença do paciente: pending (aguardando), confirmed (confirmado), declined (recusado)';
COMMENT ON COLUMN appointments.confirmed_at IS
'Data e hora em que o paciente confirmou presença na consulta';
-- Criar índices
CREATE INDEX IF NOT EXISTS idx_appointments_confirmation_status
ON appointments(confirmation_status)
WHERE confirmation_status = 'pending';
CREATE INDEX IF NOT EXISTS idx_appointments_patient_confirmation
ON appointments(patient_id, confirmation_status, scheduled_at);
RAISE NOTICE '✓ Índices criados';
-- Atualizar consultas existentes
UPDATE appointments
SET confirmation_status = 'pending'
WHERE confirmation_status IS NULL
AND status IN ('requested', 'confirmed')
AND scheduled_at > NOW();
UPDATE appointments
SET confirmation_status = 'confirmed'
WHERE confirmation_status IS NULL
AND status = 'completed';
UPDATE appointments
SET confirmation_status = 'declined'
WHERE confirmation_status IS NULL
AND status IN ('cancelled', 'no_show');
RAISE NOTICE '✓ Consultas existentes atualizadas';
RAISE NOTICE '✓✓ Migration concluída com sucesso!';
END IF;
END $$;
-- Verificar resultado
SELECT
column_name,
data_type,
is_nullable,
column_default
FROM information_schema.columns
WHERE table_name = 'appointments'
AND column_name IN ('confirmation_status', 'confirmed_at')
ORDER BY ordinal_position;