fix(api): check if user exists before hashing password on registration
feat(api): reimpl user registration