コード例 #1
0
        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());
        }
コード例 #2
0
        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());
        }
コード例 #3
0
        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));
        }