-- Исправление триггера create_match_on_mutual_like -- Дата: 2025-11-06 -- Проблемы: -- 1. Использовались неправильные имена полей: target_id вместо target_user_id, action вместо type -- 2. Использовались несуществующие колонки в notifications: content и reference_id вместо data -- Удаляем старую функцию DROP FUNCTION IF EXISTS create_match_on_mutual_like() CASCADE; -- Создаем исправленную функцию CREATE OR REPLACE FUNCTION create_match_on_mutual_like() RETURNS TRIGGER AS $$ DECLARE reverse_like_exists BOOLEAN; match_id_var UUID; BEGIN -- Проверяем только лайки и суперлайки (игнорируем pass) IF NEW.type != 'like' AND NEW.type != 'superlike' THEN RETURN NEW; END IF; -- Проверяем есть ли обратный лайк (правильные имена полей: target_user_id, type) SELECT EXISTS ( SELECT 1 FROM swipes WHERE user_id = NEW.target_user_id AND target_user_id = NEW.user_id AND type IN ('like', 'superlike') ) INTO reverse_like_exists; -- Если есть взаимный лайк, создаем матч IF reverse_like_exists THEN -- Создаем матч и получаем его ID INSERT INTO matches (user_id_1, user_id_2, created_at, is_active) VALUES ( LEAST(NEW.user_id, NEW.target_user_id), GREATEST(NEW.user_id, NEW.target_user_id), NOW(), true ) ON CONFLICT (user_id_1, user_id_2) DO UPDATE SET is_active = true RETURNING id INTO match_id_var; -- Создаем уведомления для обоих пользователей -- Используем data (jsonb) вместо content и reference_id INSERT INTO notifications (user_id, type, data, is_read, created_at) VALUES ( NEW.user_id, 'new_match', jsonb_build_object('message', 'У вас новый матч!', 'match_id', match_id_var), false, NOW() ); INSERT INTO notifications (user_id, type, data, is_read, created_at) VALUES ( NEW.target_user_id, 'new_match', jsonb_build_object('message', 'У вас новый матч!', 'match_id', match_id_var), false, NOW() ); END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; -- Пересоздаем триггер DROP TRIGGER IF EXISTS create_match_trigger ON swipes; CREATE TRIGGER create_match_trigger AFTER INSERT ON swipes FOR EACH ROW EXECUTE FUNCTION create_match_on_mutual_like(); -- Проверка SELECT 'Триггер create_match_on_mutual_like успешно исправлен!' as status; COMMENT ON FUNCTION create_match_on_mutual_like() IS 'Триггер автоматически создает матч при взаимном лайке. Исправлено: использование правильных имен полей (target_user_id, type) и правильной структуры notifications (data jsonb).';