/// <summary>
        /// Обновление данных карточки
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="fieldDto"></param>
        /// <returns></returns>
        public async Task <Result> UpdateFieldAsync(Guid userId, CaseFieldDto fieldDto)
        {
            using (_unitOfWork.Begin(IsolationLevel.Serializable))
            {
                var caseFolder = await _caseFolderRepository.GetById(fieldDto.CaseFolderId);

                if (caseFolder == null)
                {
                    _logger.Warning($"CaseFolder with Id {fieldDto.CaseFolderId} not found");
                    return(Result.Failure(ErrorCodes.CaseFolderNotFound));
                }

                Result <UserClientDto> result = await _userManagementServiceClient.GetUserById(userId);

                if (result.IsFailure)
                {
                    _logger.Warning($"User with Id {userId} not found");
                    return(Result.Failure(ErrorCodes.UserNotFound));
                }

                var user = _mapper.Map <UserDto>(result.Value);

                var updateResult = caseFolder.UpdateField(fieldDto.FieldId, fieldDto.Value);
                if (updateResult.IsFailure)
                {
                    _logger.Warning(updateResult.ErrorMessage);
                    return(updateResult);
                }

                var caseCard = caseFolder.GetCaseForUser(user.Id);
                if (caseCard.IsFailure)
                {
                    _logger.Warning(caseCard.ErrorMessage);
                    return(Result.Failure(caseCard.ErrorCode));
                }

                var caseStatusResult = caseCard.Value.SetStatusInProgress();
                if (caseStatusResult.IsFailure)
                {
                    _logger.Warning(caseStatusResult.ErrorMessage);
                    return(Result.Failure(caseStatusResult.ErrorCode));
                }

                await _unitOfWork.CommitAsync();

                var changeEventDto = new CaseFieldChangeEventDto
                {
                    CaseFolderId = fieldDto.CaseFolderId,
                    FieldId      = fieldDto.FieldId,
                    OperatorId   = userId
                };

                await _phoneHubMessageService.NotifyClientsAboutFieldChangedAsync(changeEventDto);

                return(Result.Success());
            }
        }
        /// <summary>
        /// Информирование операторов о изменении поля карточки.
        /// </summary>
        /// <param name="operatorId"></param>
        /// <param name="caseFolderId"></param>
        /// <param name="fieldId"></param>
        /// <returns></returns>
        public async Task <Result> SetActiveFieldAsync(Guid operatorId, Guid caseFolderId, Guid fieldId)
        {
            var changeEventDto = new CaseFieldChangeEventDto
            {
                CaseFolderId = caseFolderId,
                FieldId      = fieldId,
                OperatorId   = operatorId
            };
            await _phoneHubMessageService.NotifyClientsAboutActiveFieldAsync(changeEventDto);

            return(Result.Success());
        }
 /// <summary>
 /// Оповестить клиентов о том, что в данный момент меняется поле карточки.
 /// </summary>
 public async Task NotifyClientsAboutActiveFieldAsync(CaseFieldChangeEventDto caseFieldChangeEventDto)
 {
     await _phoneHubContext.Clients.All.SendAsync("OnActiveFieldUpdating", caseFieldChangeEventDto);
 }
 /// <summary>
 /// Оповестить клиентов о том, что значение в поле карточки было изменено.
 /// </summary>
 public async Task NotifyClientsAboutFieldChangedAsync(CaseFieldChangeEventDto caseFieldChangeEventDto)
 {
     await _phoneHubContext.Clients.All.SendAsync("OnCaseFieldChanged", caseFieldChangeEventDto);
 }