61 lines
2.5 KiB
PL/PgSQL
61 lines
2.5 KiB
PL/PgSQL
-- ============================================
|
|
-- FIX: Ambiguous column references
|
|
-- ============================================
|
|
|
|
-- Dropar função existente
|
|
DROP FUNCTION IF EXISTS get_user_conversations(UUID, VARCHAR);
|
|
|
|
-- Recriar função get_user_conversations com aliases qualificados
|
|
CREATE OR REPLACE FUNCTION get_user_conversations(
|
|
p_user_id UUID,
|
|
p_user_type VARCHAR
|
|
)
|
|
RETURNS TABLE (
|
|
conversation_id UUID,
|
|
other_user_id UUID,
|
|
other_user_name TEXT,
|
|
other_user_specialty TEXT,
|
|
other_user_avatar TEXT,
|
|
last_message TEXT,
|
|
last_message_time TIMESTAMPTZ,
|
|
unread_count BIGINT,
|
|
is_online BOOLEAN,
|
|
created_at TIMESTAMPTZ
|
|
) AS $$
|
|
BEGIN
|
|
IF p_user_type = 'patient' THEN
|
|
RETURN QUERY
|
|
SELECT
|
|
c.id as conversation_id,
|
|
c.external_doctor_id as other_user_id,
|
|
NULL::TEXT as other_user_name,
|
|
NULL::TEXT as other_user_specialty,
|
|
NULL::TEXT as other_user_avatar,
|
|
(SELECT m.content FROM messages m WHERE m.conversation_id = c.id ORDER BY m.created_at DESC LIMIT 1) as last_message,
|
|
(SELECT m.created_at FROM messages m WHERE m.conversation_id = c.id ORDER BY m.created_at DESC LIMIT 1) as last_message_time,
|
|
(SELECT COUNT(*) FROM messages m WHERE m.conversation_id = c.id AND m.sender_type = 'doctor' AND m.read_at IS NULL)::BIGINT as unread_count,
|
|
COALESCE((SELECT up.online FROM user_presence up WHERE up.user_id = c.external_doctor_id AND up.user_type = 'doctor'), false) as is_online,
|
|
c.created_at
|
|
FROM conversations c
|
|
WHERE c.external_patient_id = p_user_id
|
|
ORDER BY last_message_time DESC NULLS LAST;
|
|
ELSE
|
|
RETURN QUERY
|
|
SELECT
|
|
c.id as conversation_id,
|
|
c.external_patient_id as other_user_id,
|
|
NULL::TEXT as other_user_name,
|
|
NULL::TEXT as other_user_specialty,
|
|
NULL::TEXT as other_user_avatar,
|
|
(SELECT m.content FROM messages m WHERE m.conversation_id = c.id ORDER BY m.created_at DESC LIMIT 1) as last_message,
|
|
(SELECT m.created_at FROM messages m WHERE m.conversation_id = c.id ORDER BY m.created_at DESC LIMIT 1) as last_message_time,
|
|
(SELECT COUNT(*) FROM messages m WHERE m.conversation_id = c.id AND m.sender_type = 'patient' AND m.read_at IS NULL)::BIGINT as unread_count,
|
|
COALESCE((SELECT up.online FROM user_presence up WHERE up.user_id = c.external_patient_id AND up.user_type = 'patient'), false) as is_online,
|
|
c.created_at
|
|
FROM conversations c
|
|
WHERE c.external_doctor_id = p_user_id
|
|
ORDER BY last_message_time DESC NULLS LAST;
|
|
END IF;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|