public Atendimento SalvarAtualizarAtendimento(string chaveAcessoRemetente, Usuario usuarioDestinatario, string textoMensagem, Atendimento atendimentoEmAndamento) { var usuarioRemetente = _servicoUsuario.ObterPorChave(chaveAcessoRemetente); if (usuarioRemetente != null) { var atendimento = atendimentoEmAndamento != null?_repositorioConversa.Obter(atendimentoEmAndamento.Id) : null; var mensagem = new Mensagem(textoMensagem, usuarioRemetente, usuarioDestinatario); if (atendimento != null) { atendimento.Mensagens.Add(mensagem); _repositorioConversa.Atualizar(atendimento); } else { var atendente = _servicoAtendente.ObterPorChaveAcesso(chaveAcessoRemetente); atendimento = SalvarNovoAtendimento(usuarioDestinatario, atendimento, mensagem, atendente); usuarioRemetente.Atendimentos.Add(atendimento); usuarioDestinatario.Atendimentos.Add(atendimento); _servicoUsuario.Atualizar(usuarioDestinatario.Id, usuarioDestinatario.Nome, usuarioDestinatario.Email, usuarioDestinatario.Telefone); _servicoUsuario.Atualizar(usuarioRemetente.Id, usuarioRemetente.Nome, usuarioRemetente.Email, usuarioRemetente.Telefone); } return(atendimento); } else { throw new ValidacaoException("Remetente não encontrado"); } }
public override void OnMessage(string dados) { try { var mensagem = JsonConvert.DeserializeObject <Mensagem>(dados, _settings); if (mensagem.Destinatario == null) { throw new ValidacaoException("Entrada de dados invalida. É necessário informar o Login do destinatário."); } Usuario usuarioDestinatario; usuarioDestinatario = _servicoUsuario.ObterPorLogin(mensagem.Destinatario.Login); if (usuarioDestinatario == null) { throw new ValidacaoException("Destinatário não encontrado."); } var atendimento = _servicoAtendimento.SalvarAtualizarAtendimento(_chaveAcesso, usuarioDestinatario, mensagem.Texto, mensagem.Atendimento); var usuarioRementente = _servicoUsuario.ObterPorChave(_chaveAcesso); EnviarMensagem(usuarioRementente, usuarioDestinatario, atendimento); var objetoRespostaParaRemetente = ObjetoResposta(usuarioDestinatario, atendimento); var responstaParaRemetente = JsonConvert.SerializeObject(objetoRespostaParaRemetente, _settings); Send(responstaParaRemetente); } catch (SessaoException ex) { webSocketClient.Remove(this); RetornarErro(ex); } catch (ValidacaoException ex) { RetornarErro(ex); } catch (Exception ex) { RetornarErro(ex); } }
public JsonResult ObterAtendimentos(string chaveAcesso) { var usuarioConectado = _usuarioServico.ObterPorChave(chaveAcesso); object retorno; if (usuarioConectado.Atendente) { var clientesAguardandoAtendimento = _usuarioServico.UsuariosAguardandoAtendimento(); retorno = clientesAguardandoAtendimento.Select(usuario => ObjetoResposta(usuario, usuario.Atendimentos.LastOrDefault(atendimento => atendimento.Atendente.Usuario.ChaveAcesso == chaveAcesso))); } else { var usuarioLogado = _usuarioServico.ObterPorChave(chaveAcesso); var objetoResposta = ObjetoResposta(usuarioConectado); var respostaParaRemetente = JsonConvert.SerializeObject(objetoResposta, _settings); retorno = ObjetoResposta(usuarioLogado, usuarioLogado.Atendimentos.LastOrDefault(atendimento => atendimento.Cliente.ChaveAcesso == chaveAcesso)); } return(Json(retorno, JsonRequestBehavior.AllowGet)); }