/// <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); }