45 lines
1.3 KiB
PL/PgSQL
45 lines
1.3 KiB
PL/PgSQL
-- Добавляем новые поля в messages
|
|
ALTER TABLE messages
|
|
ADD COLUMN IF NOT EXISTS role VARCHAR(20) NOT NULL DEFAULT 'user',
|
|
ADD COLUMN IF NOT EXISTS guest_message_id INTEGER,
|
|
ADD COLUMN IF NOT EXISTS tokens_used INTEGER DEFAULT 0,
|
|
ADD COLUMN IF NOT EXISTS is_processed BOOLEAN DEFAULT FALSE;
|
|
|
|
-- Создаем функцию для связывания сообщений
|
|
CREATE OR REPLACE FUNCTION link_guest_messages(
|
|
p_user_id INTEGER,
|
|
p_guest_id VARCHAR(255)
|
|
) RETURNS VOID AS $$
|
|
DECLARE
|
|
v_conversation_id INTEGER;
|
|
BEGIN
|
|
-- Создаем новую беседу для гостевых сообщений
|
|
INSERT INTO conversations (created_at, updated_at)
|
|
VALUES (NOW(), NOW())
|
|
RETURNING id INTO v_conversation_id;
|
|
|
|
-- Копируем гостевые сообщения в основную таблицу
|
|
INSERT INTO messages (
|
|
conversation_id,
|
|
sender_type,
|
|
sender_id,
|
|
content,
|
|
role,
|
|
channel,
|
|
guest_message_id,
|
|
created_at
|
|
)
|
|
SELECT
|
|
v_conversation_id,
|
|
CASE WHEN is_ai THEN 'assistant' ELSE 'user' END,
|
|
CASE WHEN NOT is_ai THEN p_user_id ELSE NULL END,
|
|
content,
|
|
CASE WHEN is_ai THEN 'assistant' ELSE 'user' END,
|
|
'chat',
|
|
id,
|
|
created_at
|
|
FROM guest_messages
|
|
WHERE guest_id = p_guest_id
|
|
ORDER BY created_at;
|
|
END;
|
|
$$ LANGUAGE plpgsql; |