public async Task <IActionResult> RequestTutorAsync(RequestTutorRequest model, [FromServices] IIpToLocation ipLocation, [FromServices] TelemetryClient client, [FromHeader(Name = "referer")] Uri referer, [FromServices] ICountryService countryService, CancellationToken token) { if (!_userManager.TryGetLongUserId(User, out var userId)) { if (model.Email == null) { ModelState.AddModelError("error", _stringLocalizer["Need to have email"]); client.TrackTrace("Need to have email 1"); return(BadRequest(ModelState)); } if (model.Phone == null) { ModelState.AddModelError("error", _stringLocalizer["Need to have phone"]); client.TrackTrace("Need to have phone 2"); return(BadRequest(ModelState)); } var location = await ipLocation.GetAsync(HttpContext.GetIpAddress(), token); var user = await _userManager.FindByEmailAsync(model.Email); if (user != null) { if (user.PhoneNumber == null) { var result = await _userManager.SetPhoneNumberAndCountryAsync(user, model.Phone, location?.CallingCode, token); if (result != IdentityResult.Success) { if (string.Equals(result.Errors.First().Code, "Duplicate", StringComparison.OrdinalIgnoreCase)) { client.TrackTrace("Invalid Phone number"); ModelState.AddModelError("error", _stringLocalizer["Phone number Already in use"]); return(BadRequest(ModelState)); } client.TrackTrace("Invalid Phone number"); ModelState.AddModelError("error", _stringLocalizer["Invalid Phone number"]); return(BadRequest(ModelState)); } } userId = user.Id; } else { user = await _userManager.FindByPhoneAsync(model.Phone, location?.CallingCode); if (user != null) { userId = user.Id; } else { var country = await countryService.GetUserCountryAsync(token); user = new User(model.Email, model.Name, null, CultureInfo.CurrentCulture, country); var createUserCommand = new CreateUserCommand(user, model.Course); await _commandBus.DispatchAsync(createUserCommand, token); var result = await _userManager.SetPhoneNumberAndCountryAsync(user, model.Phone, location?.CallingCode, token); if (result != IdentityResult.Success) { ModelState.AddModelError("error", _stringLocalizer["Invalid Phone number"]); client.TrackTrace("Invalid Phone number 2"); return(BadRequest(ModelState)); } userId = user.Id; } } } try { var queryString = Microsoft.AspNetCore.WebUtilities.QueryHelpers.ParseQuery(referer.Query); queryString.TryGetValue("utm_source", out var utmSource); var command = new RequestTutorCommand(model.Course, _stringLocalizer["RequestTutorChatMessage", model.Course, model.Text ?? string.Empty], userId, referer.AbsoluteUri, model.Text, model.TutorId, utmSource, model.MoreTutors); await _commandBus.DispatchAsync(command, token); } catch (ArgumentException) { ModelState.AddModelError("error", _stringLocalizer["You cannot request tutor to yourself"]); return(BadRequest(ModelState)); } catch (SqlConstraintViolationException) { client.TrackTrace("Invalid Course"); ModelState.AddModelError("error", _stringLocalizer["Invalid Course"]); return(BadRequest(ModelState)); } if (model.TutorId.HasValue) { var query = new GetPhoneNumberQuery(model.TutorId.Value); var val = await _queryBus.QueryAsync(query, token); return(Ok(new { PhoneNumber = val })); } return(Ok()); }
public async Task GetPhoneNumberQuery_Ok() { var query = new GetPhoneNumberQuery(159039); var _ = await fixture.QueryBus.QueryAsync(query, default); }