Why use `tap` here? Does `set_topic` need to return the room? Could you simplify this to `fetch_room(room_id).topic = topic`?