private async Task <Result> ProcessSms(UserDto currentUser, UserItemClientDto userItem) { Sms sms = await _smsRepository.GetById(userItem.ItemId); if (sms.Status == SmsStatus.Accepted) { _logger.Warning("SMS already accepted"); return(Result.Failure(ErrorCodes.SMSAlreadyTaken)); } var caseType = await _caseTypeRepository.GetById(userItem.CaseTypeId); if (caseType == null) { _logger.Warning($"CaseType with Id {userItem.CaseTypeId} not found"); return(Result.Failure(ErrorCodes.CaseTypeNotFound)); } Result <CaseFolder> result = AcceptSms(sms, caseType, currentUser.Id); if (result.IsFailure) { _logger.Warning($"Failed to receive SMS.. {result.ErrorMessage}"); return(Result.Failure(result.ErrorCode)); } var caseFolder = result.Value; await _caseFolderRepository.Add(caseFolder); await _unitOfWork.CommitAsync(); await _phoneHubMessageService.NotifyUsersAboutAcceptedSms(caseFolder.Id, currentUser.Id); return(Result.Success()); }
private async Task <Result> ProcessCall(UserDto currentUser, UserItemClientDto userItem) { Result <Guid> caseFolderIdResult = await PrepareCase(userItem); if (caseFolderIdResult.IsFailure) { return(Result.Failure(caseFolderIdResult.ErrorCode)); } Result <CallClientDto> acceptCallResult = await _callManagementServiceClient.AcceptCall( new AcceptCallClientDto { CallId = userItem.ItemId, UserExtension = currentUser.Extension, CaseFolderId = caseFolderIdResult.Value }); if (acceptCallResult.IsFailure) { _logger.Warning($"AcceptInboxItem. Error accepting call. {acceptCallResult.ErrorMessage}"); await _phoneHubMessageService.NotifyUsersAboutCallEnded(currentUser.Id, null); return(Result.Failure(ErrorCodes.UnableToAcceptCall)); } var call = acceptCallResult.Value; await _unitOfWork.CommitAsync(); await _phoneHubMessageService.NotifyUsersAboutAcceptedCall(currentUser.Id, call.Line.Id, call.Line.CaseFolderId); return(Result.Success()); }
private async Task <Result <Guid> > PrepareCase(UserItemClientDto userItem) { Result <CallClientDto> callInfoResult = await _callManagementServiceClient.GetCallById(userItem.ItemId); if (callInfoResult.IsFailure) { _logger.Error($"ProcessCall. {callInfoResult.ErrorMessage}"); return(Result.Failure(callInfoResult.ErrorCode, callInfoResult.ErrorMessage)); } var caseFolderIdResult = callInfoResult.Value.Line.CaseFolderId; if (!userItem.CreateCaseCard) { if (caseFolderIdResult.HasValue) { return(Result.Success(caseFolderIdResult.Value)); } var newEmptyCaseFolder = new CaseFolder(); await _caseFolderRepository.Add(newEmptyCaseFolder); return(Result.Success(newEmptyCaseFolder.Id)); } var caseType = await _caseTypeRepository.GetById(userItem.CaseTypeId); if (caseFolderIdResult.HasValue) { var caseFolder = await _caseFolderRepository.GetById(caseFolderIdResult.Value); caseFolder.AddCaseCard(caseType, userItem.UserId); return(Result.Success(caseFolderIdResult.Value)); } var newCaseFolder = new CaseFolder(); newCaseFolder.AddCaseCard(caseType, userItem.UserId); await _caseFolderRepository.Add(newCaseFolder); return(Result.Success(newCaseFolder.Id)); }