create table if not exists public.messages ( id bigint generated by default as identity primary key, room text not null, username text not null, message_type text not null check (message_type in ('text', 'file')), text text, file_url text, file_path text, file_name text, file_type text, file_size integer, created_at timestamptz not null default now(), expires_at timestamptz not null default (now() + interval '5 hours') ); alter table public.messages add column if not exists file_path text; alter table public.messages add column if not exists expires_at timestamptz; update public.messages set expires_at = created_at + interval '5 hours' where expires_at is null; alter table public.messages alter column expires_at set default (now() + interval '5 hours'); alter table public.messages alter column expires_at set not null; create index if not exists messages_room_created_at_idx on public.messages (room, created_at desc); create index if not exists messages_expires_at_idx on public.messages (expires_at); alter table public.messages enable row level security; drop policy if exists "Allow public read messages" on public.messages;