Abstract Rooms and Users in their own objects

I made a small abstraction for `Rooms` and `Users`.
I would like @ametaireau's opinion on that before merging.
Should we consider 0 as an invalid value?
We may also think of a specific way to say that the room simply does not expire, would 0 fit for this purpose?