buster/packages/database/drizzle/0058_add_file_info_to_chats...

36 lines
1.2 KiB
SQL

-- Migration: add_file_info_to_chats
-- Created: 2025-04-01-184914
-- Original: 2025-04-01-184914_add_file_info_to_chats
ALTER TABLE chats
ADD COLUMN most_recent_file_id UUID NULL,
ADD COLUMN most_recent_file_type VARCHAR(255) NULL;
-- Add indices to improve query performance
CREATE INDEX idx_chats_most_recent_file_id ON chats(most_recent_file_id);
CREATE INDEX idx_chats_most_recent_file_type ON chats(most_recent_file_type);
-- Data Migration - Set most_recent_file_id and most_recent_file_type for existing chats
WITH LatestFilePerChat AS (
SELECT DISTINCT ON (m.chat_id)
m.chat_id,
mtf.file_id,
-- Determine file type
CASE
WHEN mf.id IS NOT NULL THEN 'metric'
WHEN df.id IS NOT NULL THEN 'dashboard'
ELSE NULL
END AS file_type
FROM messages m
JOIN messages_to_files mtf ON m.id = mtf.message_id
LEFT JOIN metric_files mf ON mtf.file_id = mf.id
LEFT JOIN dashboard_files df ON mtf.file_id = df.id
WHERE m.deleted_at IS NULL AND mtf.deleted_at IS NULL
ORDER BY m.chat_id, m.created_at DESC
)
UPDATE chats c
SET
most_recent_file_id = lfpc.file_id,
most_recent_file_type = lfpc.file_type
FROM LatestFilePerChat lfpc
WHERE c.id = lfpc.chat_id;