public async Task <demoResult> CallToNumber([FromBody] CallToNumberDto model) { if (model.Extension == default) { _logger.Warning("External number not set"); return(BadRequest(ErrorCodes.ValidationError)); } var result = await _callManagementService.CallToNumber(GetUserId(), model); if (result.IsFailure) { _logger.Warning($"Ошибка при звонке на внешний номер. {result.ErrorMessage}"); return(BadRequest(result.ErrorCode)); } if (result.Value == CallBackToApplicantStatus.AlreadyInCall) { _logger.Warning("Ошибка при звонке на внешний номер. Вызываемый участник уже участвует в разговоре."); return(BadRequest(ErrorCodes.CallBackToApplicantAlreadyInCall)); } return(Ok()); }
/// <summary> /// Позвонить на указанный номер. /// </summary> public async Task <Result <CallBackToApplicantStatus> > CallToNumber(Guid userId, CallToNumberDto model) { using (_unitOfWork.Begin()) { Result <UserClientDto> userResult = await _userManagementServiceClient.GetUserById(userId); if (userResult.IsFailure) { _logger.Warning($"CallToNumber. Error get user by Id. {userResult.ErrorMessage}"); return(Result.Failure(ErrorCodes.UserNotFound)); } var user = _mapper.Map <UserDto>(userResult.Value); var contactDtoResult = await _contactManagementClient.GetContactByNumber(model.Extension); Participant participant; if (contactDtoResult.IsFailure) { _logger.Warning($"CallToNumber. Error getting contact. {contactDtoResult.ErrorMessage}"); participant = new Applicant(model.Extension); } else { var contactDto = contactDtoResult.Value; var routeName = contactDto.Phones?.FirstOrDefault(x => x.Number == model.Extension)?.ContactRouteName; participant = new Contact(model.Extension, contactDto.Name, contactDto.Organization, contactDto.Position, routeName); } await _participantRepository.Add(participant); var clientModel = new CallToNumberClientDto { ParticipantId = participant.Id, UserExtension = user.Extension, ParticipantExtension = model.Extension }; var result = await _callManagementServiceClient.CallToNumber(clientModel); if (result.IsFailure) { _logger.Warning($"CallToNumber. {result.ErrorMessage}"); return(Result.Failure <CallBackToApplicantStatus>(ErrorCodes.UnableToCallToNumber)); } await _unitOfWork.CommitAsync(); await _phoneHubMessageService.NotifyUserAboutStartedExternalCall(userId, result.Value.LineId); return(Result.Success(CallBackToApplicantStatus.Ok)); } }