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