public async Task <ApiResponse <User> > RegisterUser(User user) { var response = new ApiResponse <User>(); var userEntity = _mapper.Map <Entity.User>(user); userEntity.IsActive = true; var businessEntity = _mapper.Map <Entity.Business>(user.Business); var isEmailExist = _userRepo.List(i => i.Email == user.Email).Any(); if (isEmailExist) { response.Success = false; response.ErrorMesssage.Add(MtsResource.InvalidEmail); } var isBusinessNameExist = _businessRepo.List(i => i.Name == user.Business.Name).Any(); if (isBusinessNameExist) { response.Success = false; response.ErrorMesssage.Add(MtsResource.InvalidBusinessName); } if (response.Success) { using (var tx = _registrationRequestRepo.Context.Database.BeginTransaction()) { try { userEntity.Password = _crypto.CalculateHash(user.Password); await _userRepo.Save(userEntity); await _businessRepo.Save(businessEntity); await _userBusinessRepo.Save(new Entity.UserBusiness { BusinessId = businessEntity.Id, UserId = userEntity.Id }); user = _mapper.Map <User>(userEntity); user.Business = _mapper.Map <Business>(businessEntity); response.DataResponse = user; tx.Commit(); } catch (Exception e) { response.Success = false; response.ErrorMesssage.Add(e.GetBaseException().Message); tx.Rollback(); } } } return(response); }