104 lines
3.3 KiB
SQL
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;
|