Consolidate publish logic in Rooms model