Пример #1
0
        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");
            }
        }
Пример #2
0
        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));
        }