50 lines
1.7 KiB
PL/PgSQL
50 lines
1.7 KiB
PL/PgSQL
-- Исправление триггера notify_new_message для использования правильной схемы notifications
|
||
-- Проблема: триггер использует content и reference_id вместо data (jsonb)
|
||
|
||
-- Удаляем старый триггер и функцию
|
||
DROP TRIGGER IF EXISTS notify_new_message_trigger ON messages;
|
||
DROP FUNCTION IF EXISTS notify_new_message();
|
||
|
||
-- Создаём новую функцию с правильной схемой
|
||
CREATE OR REPLACE FUNCTION notify_new_message()
|
||
RETURNS TRIGGER AS $$
|
||
DECLARE
|
||
recipient_id UUID;
|
||
BEGIN
|
||
-- Определяем получателя сообщения (второго участника матча)
|
||
SELECT CASE
|
||
WHEN m.user_id_1 = NEW.sender_id THEN m.user_id_2
|
||
ELSE m.user_id_1
|
||
END INTO recipient_id
|
||
FROM matches m
|
||
WHERE m.id = NEW.match_id;
|
||
|
||
-- Создаём уведомление с правильной структурой (data jsonb)
|
||
IF recipient_id IS NOT NULL THEN
|
||
INSERT INTO notifications (user_id, type, data, created_at)
|
||
VALUES (
|
||
recipient_id,
|
||
'new_message',
|
||
jsonb_build_object(
|
||
'message_id', NEW.id,
|
||
'match_id', NEW.match_id,
|
||
'sender_id', NEW.sender_id,
|
||
'content_preview', LEFT(NEW.content, 50)
|
||
),
|
||
NOW()
|
||
);
|
||
END IF;
|
||
|
||
RETURN NEW;
|
||
END;
|
||
$$ LANGUAGE plpgsql;
|
||
|
||
-- Создаём триггер заново
|
||
CREATE TRIGGER notify_new_message_trigger
|
||
AFTER INSERT ON messages
|
||
FOR EACH ROW
|
||
EXECUTE FUNCTION notify_new_message();
|
||
|
||
-- Проверка
|
||
SELECT 'Trigger notify_new_message fixed successfully' AS status;
|