geo detection
This commit is contained in:
82
sql/fix_match_trigger.sql
Normal file
82
sql/fix_match_trigger.sql
Normal file
@@ -0,0 +1,82 @@
|
||||
-- Исправление триггера 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).';
|
||||
Reference in New Issue
Block a user