public object Post(ParticipantePronostico ppronostico)
        {
            int idParticipante;

            try
            {
                idParticipante = this.Session.Get <int>("IdParticipante");
            }
            catch (Exception e)
            {
                throw new UnauthorizedAccessException("El usuario no ha iniciado sesión.", e);
            }
            if (idParticipante == 0)
            {
                throw new UnauthorizedAccessException("El usuario no ha iniciado sesión.");
            }

            Partido partido = QwNhSession.Get <Partido>(ppronostico.IdPartido);

            if (partido == null)
            {
                throw new ArgumentException("ID de partido inválido.");
            }
            if (partido.Iniciado)
            {
                throw new UnauthorizedAccessException("El partido ya ha iniciado. No puede modificar su pronóstico");
            }

            Pronostico pronostico = QwNhSession.QueryOver <Pronostico>().Where(x => x.PartidoPronostico.IdPartido == ppronostico.IdPartido && x.ParticipantePronostico.IdParticipante == idParticipante).SingleOrDefault();

            if (pronostico == null)
            {
                Participante participante = new Participante();
                QwNhSession.Load(participante, idParticipante);
                pronostico = new Pronostico()
                {
                    ParticipantePronostico = participante,
                    PartidoPronostico      = partido
                };
            }

            pronostico.Goles1 = ppronostico.Goles1;
            pronostico.Goles2 = ppronostico.Goles2;
            QwNhSession.SaveOrUpdate(pronostico);
            QwNhSession.Transaction.Commit();

            var ppronosticoResponse = new PronosticoResponse()
            {
                Pronostico = ppronostico
            };

            return(new HttpResult(ppronosticoResponse)
            {
                StatusCode = HttpStatusCode.Created,
                Headers =
                {
                    { HttpHeaders.Location, base.Request.AbsoluteUri.CombineWith(ppronosticoResponse.Pronostico.IdPartido) }
                }
            });
        }
示例#2
0
        public void GetByDiaOk()
        {
            int dia        = 4;
            var pronostico = new Pronostico
            {
                Clima         = ClimaConstants.Sequia,
                Dia           = dia,
                Fecha         = DateTime.Today,
                NivelDeLluvia = 0
            };

            pronosticoServiceMock.Setup(service => service.GetByDia(dia)).Returns(pronostico);

            var controller   = new PronosticoController(logger, pronosticoServiceMock.Object, jobServiceMock.Object, memoryCache);
            var actionResult = controller.Get(dia);

            // Assert
            Assert.NotNull(actionResult);
            var result = actionResult as OkObjectResult;

            Assert.NotNull(result);

            var p = result.Value as Pronostico;

            Assert.AreEqual(p.Dia, dia);
        }
示例#3
0
        public void GetAll()
        {
            var list       = new List <Pronostico>();
            var pronostico = new Pronostico
            {
                Clima         = ClimaConstants.Sequia,
                Dia           = 2,
                Fecha         = DateTime.Today,
                NivelDeLluvia = 0
            };

            list.Add(pronostico);
            pronostico = new Pronostico
            {
                Clima         = ClimaConstants.Sequia,
                Dia           = 4,
                Fecha         = DateTime.Today,
                NivelDeLluvia = 0
            };
            list.Add(pronostico);
            pronostico = new Pronostico
            {
                Clima         = ClimaConstants.Sequia,
                Dia           = 5,
                Fecha         = DateTime.Today,
                NivelDeLluvia = 0
            };
            list.Add(pronostico);

            pronosticoServiceMock.Setup(service => service.GetAll()).Returns(list);

            var controller   = new PronosticoController(logger, pronosticoServiceMock.Object, jobServiceMock.Object, memoryCache);
            var actionResult = controller.Get();

            // Assert
            Assert.NotNull(actionResult);
            var result = actionResult as OkObjectResult;

            Assert.NotNull(result);

            var pronosticos = result.Value as List <Pronostico>;

            Assert.AreEqual(pronosticos.Count, 3);
        }
        public void GetPronosticoConClimaSequia()
        {
            var list       = new List <Pronostico>();
            var pronostico = new Pronostico
            {
                Clima         = ClimaConstants.Sequia,
                Dia           = 2,
                Fecha         = DateTime.Today,
                NivelDeLluvia = 0
            };

            list.Add(pronostico);
            pronostico = new Pronostico
            {
                Clima         = ClimaConstants.Sequia,
                Dia           = 4,
                Fecha         = DateTime.Today,
                NivelDeLluvia = 0
            };
            list.Add(pronostico);
            pronostico = new Pronostico
            {
                Clima         = ClimaConstants.Sequia,
                Dia           = 5,
                Fecha         = DateTime.Today,
                NivelDeLluvia = 0
            };
            list.Add(pronostico);

            var mock    = new Mock <IPronosticoRepository>();
            var wrapper = new Mock <IRepositoryWrapper>();

            mock.Setup(p => p.FindByCondition(It.IsAny <Expression <Func <Pronostico, bool> > >())).Returns(list);
            wrapper.Setup(p => p.Pronostico).Returns(mock.Object);
            var service = new PronosticoService(null, wrapper.Object);

            var dias = service.GetByClimas(new string[] { ClimaConstants.Sequia }).ToList();

            Assert.AreEqual(dias.Count(), 3);
            Assert.True(dias.All(d => d.Clima == ClimaConstants.Sequia));
        }
        /// <summary>
        /// GET /pronosticos
        /// </summary>
        public object Get(PartidosParticipante partidosParticipante)
        {
            int idParticipante;

            try
            {
                idParticipante = this.Session.Get <int>("IdParticipante");
            }
            catch (Exception e)
            {
                throw new UnauthorizedAccessException("El usuario no ha iniciado sesión.", e);
            }
            if (idParticipante == 0)
            {
                throw new UnauthorizedAccessException("El usuario no ha iniciado sesión.");
            }

            EtapaPartidoPronostico pp           = null;
            Pronostico             pronostico   = null;
            Participante           participante = null;
            Etapa etapa = null;
            var   query
                = QwNhSession.QueryOver <Partido>()
                  .Inner.JoinAlias(x => x.EtapaPartido, () => etapa)
                  .Left.JoinAlias(x => x.PronosticosPartidos, () => pronostico, x => x.ParticipantePronostico.IdParticipante == idParticipante)
                  .Left.JoinAlias(y => pronostico.ParticipantePronostico, () => participante, x => x.IdParticipante == idParticipante)
                  //.Where(x => participante.IdParticipante == null || participante.IdParticipante == idParticipante)
                  .SelectList(list => list
                              .Select(x => x.Codigo1).WithAlias(() => pp.Codigo1)
                              .Select(x => x.Codigo2).WithAlias(() => pp.Codigo2)
                              .Select(x => x.Equipo1).WithAlias(() => pp.Equipo1)
                              .Select(x => x.Equipo2).WithAlias(() => pp.Equipo2)
                              .Select(x => x.Goles1).WithAlias(() => pp.Goles1)
                              .Select(x => x.Goles2).WithAlias(() => pp.Goles2)
                              .Select(x => x.IdPartido).WithAlias(() => pp.IdPartido)
                              .Select(x => pronostico.Goles1).WithAlias(() => pp.GolesPronostico1)
                              .Select(x => pronostico.Goles2).WithAlias(() => pp.GolesPronostico2)
                              .Select(x => etapa.IdEtapa).WithAlias(() => pp.NumEtapa)
                              .Select(x => etapa.Nombre).WithAlias(() => pp.Etapa)
                              .Select(x => x.FechaHoraInicio).WithAlias(() => pp.FechaHoraInicio)
                              .Select(x => x.FechaHoraFin).WithAlias(() => pp.FechaHoraFin)
                              .Select(x => x.Lugar).WithAlias(() => pp.Lugar)
                              )
                  .OrderBy(x => x.FechaHoraInicio).Asc
                  .TransformUsing(Transformers.AliasToBean <EtapaPartidoPronostico>());

            return(new PartidosParticipanteResponse
            {
                Etapas
                    = query.List <EtapaPartidoPronostico>().GroupBy(x => x.NumEtapa)
                      .Select(x => {
                    EtapaPartido ep = new EtapaPartido();
                    ep.NumEtapa = x.Key;
                    ep.NombreEtapa = x.First().Etapa;
                    ep.Partidos
                        = x.Select(y => new PartidoParticipante()
                    {
                        Codigo1 = y.Codigo1,
                        Codigo2 = y.Codigo2,
                        Equipo1 = y.Equipo1,
                        Equipo2 = y.Equipo2,
                        Goles1 = y.Goles1,
                        Goles2 = y.Goles2,
                        GolesPronostico1 = y.GolesPronostico1,
                        GolesPronostico2 = y.GolesPronostico2,
                        IdPartido = y.IdPartido,
                        FechaHoraInicio = y.FechaHoraInicio,
                        Lugar = y.Lugar,
                        Iniciado = Partido.PartidoIniciado(y.FechaHoraInicio),
                        Finalizado = DateTime.Now.Subtract(y.FechaHoraFin).TotalMinutes > 0
                    }).ToList();
                    ep.Activa = !ep.Partidos.Any(z => !z.Definido) && ep.Partidos.Any(z => !z.Finalizado);
                    return ep;
                }).ToList()
            });
        }
        /// <summary>
        /// GET /pronosticos
        /// </summary>
        public object Get(PartidosParticipante partidosParticipante)
        {
            int idParticipante;

            try
            {
                idParticipante = this.Session.Get <int>("IdParticipante");
            }
            catch (Exception e)
            {
                throw new UnauthorizedAccessException("El usuario no ha iniciado sesión.", e);
            }
            if (idParticipante == 0)
            {
                throw new UnauthorizedAccessException("El usuario no ha iniciado sesión.");
            }

            EtapaPartidoPronostico pp           = null;
            Pronostico             pronostico   = null;
            Participante           participante = null;
            var query
                = QwNhSession.QueryOver <Partido>()
                  .Left.JoinAlias(x => x.PronosticosPartidos, () => pronostico, x => x.ParticipantePronostico.IdParticipante == idParticipante)
                  .Left.JoinAlias(y => pronostico.ParticipantePronostico, () => participante, x => x.IdParticipante == idParticipante)
                  //.Where(x => participante.IdParticipante == null || participante.IdParticipante == idParticipante)
                  .Where(x => x.EtapaNivel1 == partidosParticipante.EtapaNivel1)
                  .SelectList(list => list
                              .Select(x => x.Codigo1).WithAlias(() => pp.Codigo1)
                              .Select(x => x.Codigo2).WithAlias(() => pp.Codigo2)
                              .Select(x => x.Equipo1).WithAlias(() => pp.Equipo1)
                              .Select(x => x.Equipo2).WithAlias(() => pp.Equipo2)
                              .Select(x => x.Goles1).WithAlias(() => pp.Goles1)
                              .Select(x => x.Goles2).WithAlias(() => pp.Goles2)
                              .Select(x => x.IdPartido).WithAlias(() => pp.IdPartido)
                              .Select(x => pronostico.Goles1).WithAlias(() => pp.GolesPronostico1)
                              .Select(x => pronostico.Goles2).WithAlias(() => pp.GolesPronostico2)
                              .Select(x => x.FechaHoraInicio).WithAlias(() => pp.FechaHoraInicio)
                              .Select(x => x.FechaHoraFin).WithAlias(() => pp.FechaHoraFin)
                              .Select(x => x.Lugar).WithAlias(() => pp.Lugar)
                              .Select(x => x.EtapaNivel1).WithAlias(() => pp.EtapaNivel1)
                              .Select(x => x.EtapaNivel2).WithAlias(() => pp.EtapaNivel2)
                              .Select(x => x.EtapaNivel3).WithAlias(() => pp.EtapaNivel3)
                              )
                  .OrderBy(x => x.FechaHoraInicio).Asc
                  .TransformUsing(Transformers.AliasToBean <EtapaPartidoPronostico>());

            return(new PartidosParticipanteResponse
            {
                Etapas
                    = query.List <EtapaPartidoPronostico>()
                      .GroupBy(x => x.EtapaNivel2)
                      .Select(x => new Etapa
                {
                    Nombre = x.Key,
                    SubEtapas
                        = x.GroupBy(y => y.EtapaNivel3)
                          .Select(y => new Etapa
                    {
                        Nombre = y.Key,
                        Partidos = y.Select(z => new PartidoParticipante
                        {
                            IdPartido = z.IdPartido,
                            Codigo1 = z.Codigo1,
                            Codigo2 = z.Codigo2,
                            Equipo1 = z.Equipo1,
                            Equipo2 = z.Equipo2,
                            Goles1 = z.Goles1,
                            Goles2 = z.Goles2,
                            GolesPronostico1 = z.GolesPronostico1,
                            GolesPronostico2 = z.GolesPronostico2,
                            FechaHoraInicio = z.FechaHoraInicio,
                            Lugar = z.Lugar,
                            Iniciado = Partido.PartidoIniciado(z.FechaHoraInicio),
                            Finalizado = DateTime.Now.Subtract(z.FechaHoraFin).TotalMinutes > 0
                        }).ToList()
                    }).ToList()
                }).ToList()
            });
        }