refactor User model