public void Executar(int idConcurso)
        {
            var concurso = concursoRepo.AtivoByIdConcurso(idConcurso);

            Assegure.NaoNulo(concurso, "idConcurso não encontrado");


            var apostas = apostaRepo.ByIdConcurso(concurso.IdConcurso);

            var jogo = jogoRepo.GetByIdJogo(concurso.IdJogo);

            var resultado = resultadoService.GetResultado(jogo);


            var finalizarCommand = new Concurso.FinalizarCommand
            {
                Apostas       = apostas,
                DataConclusao = DateTime.Now,
                Resultado     = resultado
            };

            /// em um cenário real a implementação seria outra.
            /// Primeiro que não seria em uma thread web e sim em uma fila...

            concurso.Finalizar(finalizarCommand);
        }
Пример #2
0
        public virtual void ComputarResultado(DateTime dataComputou, IResultado resultado, IJogo jogo)
        {
            Assegure.Que(this.IdJogo == jogo.IdJogo, "Jogo inválido");

            Assegure.NaoNulo(resultado, "Informe o resultado");

            Assegure.NaoNulo(jogo, "Informe o jogo");


            this.Acerto = jogo.ComputarAposta(resultado, Volante);

            this.AcertoStatus = this.Acerto == null ? StatusAcerto.ERR : StatusAcerto.VENC;


            this.StatusProcessamento = StatusProcessamentoAposta.COMP;

            this.DataComputou = dataComputou;
        }
Пример #3
0
        protected override Acerto ApostaVencedoraTemplate(Resultado resultado, Volante volante)
        {
            Assegure.NaoNulo(resultado, "Informe o resultado");

            Assegure.NaoNulo(volante, "Informe o volante");


            var intersect = volante.NumerosSelecionados.Intersect(resultado.NumerosSorteados).ToList();

            if (intersect.Count() == 6 ||
                intersect.Count() == 5 ||
                intersect.Count() == 4)
            {
                return(new Acerto(intersect));
            }


            return(null);
        }
Пример #4
0
        public virtual void Finalizar(FinalizarCommand command)
        {
            Assegure.Que(this.IdJogo == command.Jogo.IdJogo, "Jogo inválido");

            Assegure.NaoNulo(command.Resultado, "Informe o Resultado");

            Assegure.NaoNulo(command.Apostas, "Apostas é null");

            Assegure.Que(command.Apostas.Count > 0, "Nenhuma aposta informada");


            command.Apostas.ForEach(aposta =>
                                    aposta.ComputarResultado(command.DataConclusao, command.Resultado, command.Jogo));


            this.Status = EnumStatusConcurso.CONC;

            this.DataConclusao = command.DataConclusao;

            this.Resultado = command.Resultado;
        }
Пример #5
0
        public Aposta(
            int idAposta,
            Concurso concurso,
            IJogo jogo,
            DateTime dataOcorrencia,
            string jogador,
            IVolante volante
            )
        {
            Assegure.Que(idAposta > 0, "idAposta inválida");

            Assegure.NaoNulo(concurso, "Informe o Concurso");

            Assegure.NaoNulo(jogo, "Informe o Jogo");

            Assegure.EhDataValida(dataOcorrencia, () => "Data da Ocorrência inválida");

            Assegure.NaoNulo(volante, "Informe o volante");


            jogo.ValidarVolante(volante);


            this.IdAposta = idAposta;

            this.IdConcurso = concurso.IdConcurso;

            this.IdJogo = jogo.IdJogo;

            this.DataOcorrencia = dataOcorrencia;

            this.Jogador = jogador;

            this.Volante = volante;

            this.StatusProcessamento = StatusProcessamentoAposta.FEITA;

            this.AcertoStatus = StatusAcerto.INIC;
        }
        public void Executar(Command command)
        {
            Assegure.Que(command.IdConcurso > 0, "Informe o Concurso");

            Assegure.NaoNulo(command.Apostas, "Nenhuma Aposta");

            Assegure.Que(command.Apostas.Count > 0, "Informe pelo menos uma aposta");


            var concurso = concursoRepo.AtivoByIdConcurso(command.IdConcurso);

            Assegure.NaoNulo(concurso, "Concurso não encontrado");


            var jogo = jogoRepo.GetByIdJogo(concurso.IdJogo);



            var dataOcorrencia = DateTime.Now;
            var type           = typeof(Aposta);

            foreach (var apostaDto in command.Apostas)
            {
                var idAposta = sequenceGenerator.NextIdFor(type);

                var newAposta = new Aposta(
                    idAposta,
                    concurso,
                    jogo,
                    dataOcorrencia,
                    apostaDto.Jogador,
                    apostaDto.Volante
                    );


                apostaRepo.Insert(newAposta);
            }
        }