CREATE TABLE IF NOT EXISTS chat_rooms ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), hotel_id UUID NOT NULL REFERENCES hotels(id) ON DELETE CASCADE, type VARCHAR(10) NOT NULL DEFAULT 'general' CHECK (type IN ('general', 'direct')), name VARCHAR(100), created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); CREATE TABLE IF NOT EXISTS chat_room_members ( room_id UUID NOT NULL REFERENCES chat_rooms(id) ON DELETE CASCADE, user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE, PRIMARY KEY (room_id, user_id) ); CREATE TABLE IF NOT EXISTS chat_messages ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), room_id UUID NOT NULL REFERENCES chat_rooms(id) ON DELETE CASCADE, hotel_id UUID NOT NULL REFERENCES hotels(id) ON DELETE CASCADE, sender_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE, text TEXT NOT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); CREATE INDEX IF NOT EXISTS idx_chat_messages_room ON chat_messages(room_id, created_at DESC); CREATE TABLE IF NOT EXISTS chat_read_status ( room_id UUID NOT NULL REFERENCES chat_rooms(id) ON DELETE CASCADE, user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE, last_read TIMESTAMPTZ NOT NULL DEFAULT NOW(), PRIMARY KEY (room_id, user_id) );