Ejemplo n.º 1
0
        /// <summary>
        /// Inclui o histórico e a alteração no saldo das moedas do usuárioTrilha, itemTrilha se for solução sebrae e ou itemTrilhaCurtida se for uma curtida.
        /// </summary>
        /// <param name="usuarioTrilha"></param>
        /// <param name="itemTrilha"></param>
        /// <param name="itemTrilhaCurtida"></param>
        /// <param name="quantidadePrata"></param>
        /// <param name="quantidadeOuro"></param>
        /// <param name="tipoCurtidaAnterior"></param>
        public Dictionary <string, int> Incluir(UsuarioTrilha usuarioTrilha, ItemTrilha itemTrilha = null,
                                                ItemTrilhaCurtida itemTrilhaCurtida = null, int quantidadePrata = 0, int quantidadeOuro = 0,
                                                enumTipoCurtida tipoCurtidaAnterior = enumTipoCurtida.SemAcao)
        {
            VerificarRegrasNegocio(usuarioTrilha, itemTrilha, itemTrilhaCurtida, quantidadePrata, quantidadeOuro);

            var usuarioTrilhaMoedas = new UsuarioTrilhaMoedas()
            {
                TipoCurtida   = itemTrilhaCurtida != null ? itemTrilhaCurtida.TipoCurtida : enumTipoCurtida.SemAcao,
                Curtida       = itemTrilhaCurtida,
                ItemTrilha    = itemTrilha,
                UsuarioTrilha = usuarioTrilha,
                MoedasDePrata = quantidadePrata,
                MoedasDeOuro  = quantidadeOuro,
                DataCriacao   = DateTime.Now,
                Auditoria     = new Auditoria(usuarioTrilha.Usuario.CPF)
            };

            if (itemTrilhaCurtida != null)
            {
                usuarioTrilhaMoedas.MoedasDePrata = CalcularCurtida(itemTrilhaCurtida, tipoCurtidaAnterior);
            }

            if (!this.IsCreditoDuplicado(usuarioTrilhaMoedas))
            {
                _bmUsuarioTrilhaMoedas.Salvar(usuarioTrilhaMoedas);
            }

            return(new Dictionary <string, int>()
            {
                { "Ouro", Obter(usuarioTrilha, enumTipoMoeda.Ouro) },
                { "Prata", Obter(usuarioTrilha, enumTipoMoeda.Prata) }
            });
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Validação das informações de um Item de uma Trilha.
        /// </summary>
        /// <param name="pItemTrilha"></param>
        private void ValidarInformado(ItemTrilhaCurtida pItemTrilhaCurtida)
        {
            ValidarInstancia(pItemTrilhaCurtida);

            //Verifica se o item da trilha está nulo
            if (pItemTrilhaCurtida.ItemTrilha == null)
            {
                throw new AcademicoException("Item da Trilha. Campo Obrigatório");
            }

            //Verifica se o usuario da trilha está nulo
            if (pItemTrilhaCurtida.UsuarioTrilha == null)
            {
                throw new AcademicoException("Usuario da Trilha. Campo Obrigatório");
            }

            //Verifica se o valor da curtida está vazio
            if (pItemTrilhaCurtida.ValorCurtida == 0)
            {
                throw new AcademicoException("Valor da Curtida. Campo Obrigatório");
            }

            //Verifica se o valor da curtida está vazio
            if (pItemTrilhaCurtida.ValorDescurtida == 0)
            {
                throw new AcademicoException("Valor da Descurtida. Campo Obrigatório");
            }
        }
Ejemplo n.º 3
0
        public void Salvar(ItemTrilhaCurtida pItemTrilhaCurtida)
        {
            ValidarInformado(pItemTrilhaCurtida);

            //Se Id =0, significa insert.
            if (pItemTrilhaCurtida.ID == 0)
            {
                pItemTrilhaCurtida.DataCriacao = DateTime.Now;
            }

            repositorio.Salvar(pItemTrilhaCurtida);
        }
Ejemplo n.º 4
0
 public void Excluir(int pId)
 {
     try
     {
         ItemTrilhaCurtida itemTrilhaCurtida = Obter(pId);
         bmItemTrilhaCurtida.Excluir(itemTrilhaCurtida);
     }
     catch (AcademicoException ex)
     {
         throw ex;
     }
 }
Ejemplo n.º 5
0
        /// <summary>
        /// Calcula o peso da curtida/descurtida/cancelamento que a ação atual gerou.
        /// </summary>
        /// <param name="itemTrilhaCurtida"></param>
        /// <param name="tipoCurtidaAnterior"></param>
        /// <returns></returns>
        public int CalcularCurtida(ItemTrilhaCurtida itemTrilhaCurtida, enumTipoCurtida tipoCurtidaAnterior = enumTipoCurtida.SemAcao)
        {
            if (itemTrilhaCurtida == null)
            {
                return(0);
            }

            int quantidadePrata = 0;

            switch (tipoCurtidaAnterior)
            {
            case enumTipoCurtida.SemAcao:
                if (itemTrilhaCurtida.TipoCurtida == enumTipoCurtida.Curtiu)
                {
                    quantidadePrata += itemTrilhaCurtida.ValorCurtida;
                }
                else if (itemTrilhaCurtida.TipoCurtida == enumTipoCurtida.Descurtiu)
                {
                    quantidadePrata -= itemTrilhaCurtida.ValorDescurtida;
                }
                break;

            case enumTipoCurtida.Curtiu:
                // Removo a curtida porque ele só pode ir para sem ação ou descurtida
                quantidadePrata -= itemTrilhaCurtida.ValorCurtida;
                // Caso ele vá para descurtida, removo mais o valor da descurtida
                if (itemTrilhaCurtida.TipoCurtida == enumTipoCurtida.Descurtiu)
                {
                    quantidadePrata -= itemTrilhaCurtida.ValorDescurtida;
                }
                break;

            case enumTipoCurtida.Descurtiu:
                // Removo a descurtida porque ele só pode ir para sem ação ou curtida
                quantidadePrata += itemTrilhaCurtida.ValorDescurtida;
                // Caso ele vá para descurtida, removo mais o valor da descurtida
                if (itemTrilhaCurtida.TipoCurtida == enumTipoCurtida.Curtiu)
                {
                    quantidadePrata += itemTrilhaCurtida.ValorCurtida;
                }
                break;
            }

            return(quantidadePrata);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Faz as verificações de regra de negócio para inserção e alteração de moedas
        /// </summary>
        /// <param name="itemTrilha"></param>
        /// <param name="itemTrilhaCurtida"></param>
        /// <param name="quantidadePrata"></param>
        /// <param name="quantidadeOuro"></param>
        public void VerificarRegrasNegocio(UsuarioTrilha usuarioTrilha, ItemTrilha itemTrilha = null, ItemTrilhaCurtida itemTrilhaCurtida = null, int quantidadePrata = 0, int quantidadeOuro = 0)
        {
            if (itemTrilha != null && itemTrilhaCurtida != null)
            {
                throw new ResponseException(enumResponseStatusCode.ErroRegraNegocioTrilhas, "Não é possível incluir variações ao mesmo tempo no histórico de moedas.");
            }

            if (quantidadeOuro > 0 && quantidadePrata > 0)
            {
                throw new ResponseException(enumResponseStatusCode.ErroRegraNegocioTrilhas, "Não é possível incluir moedas de prata e ouro ao mesmo tempo, a troca só é válida ao remover prata e adicionar ouro.");
            }

            if (itemTrilha != null && quantidadePrata != 0)
            {
                throw new ResponseException(enumResponseStatusCode.ErroRegraNegocioTrilhas, "Não é possível incluir moedas de prata ao completar uma solução sebrae.");
            }

            if (itemTrilhaCurtida != null && quantidadeOuro != 0)
            {
                throw new ResponseException(enumResponseStatusCode.ErroRegraNegocioTrilhas, "Não é possível incluir moedas de ouro ao curtir uma solução do trilheiro.");
            }

            if (quantidadeOuro < 0)
            {
                throw new ResponseException(enumResponseStatusCode.ErroRegraNegocioTrilhas, "Não é possível retirar moedas de ouro.");
            }

            if (quantidadeOuro > 0 && quantidadePrata < 0 && Obter(usuarioTrilha, enumTipoMoeda.Prata) < 0)
            {
                throw new ResponseException(enumResponseStatusCode.ErroRegraNegocioTrilhas, "Usuário não possuí moedas de prata suficientes para realizar a troca.");
            }
        }
Ejemplo n.º 7
0
        public void Excluir(ItemTrilhaCurtida pItemTrilhaCurtida)
        {
            this.ValidarInstancia(pItemTrilhaCurtida);

            repositorio.Excluir(pItemTrilhaCurtida);
        }
Ejemplo n.º 8
0
 public void Alterar(ItemTrilhaCurtida pItemTrilhaCurtida)
 {
     base.PreencherInformacoesDeAuditoria(pItemTrilhaCurtida);
     Incluir(pItemTrilhaCurtida);
 }
Ejemplo n.º 9
0
 public void Incluir(ItemTrilhaCurtida pItemTrilhaCurtida)
 {
     bmItemTrilhaCurtida.Salvar(pItemTrilhaCurtida);
 }
Ejemplo n.º 10
0
 /// <summary>
 /// Obtem todo o histórico de acordo com as curtidas
 /// </summary>
 /// <param name="pItemTrilhaCurtida"></param>
 /// <returns></returns>
 public IQueryable <UsuarioTrilhaMoedas> ObterTodos(ItemTrilhaCurtida pItemTrilhaCurtida)
 {
     return(repositorio.ObterTodosIQueryable().Where(x => x.Curtida.ID == pItemTrilhaCurtida.ID));
 }