major refactoring of app structure around User object while assigning state preservation responsibilities to the UserRepository