public async Task ObtenerSalasDeCineA5kilometrosOMenos()
        {
            var geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326);

            using (var context = LocalDbDatabaseInitializer.GetDbContextLocalDb(false))
            {
                var salasDeCine = new List <SalaDeCine>()
                {
                    new SalaDeCine {
                        Nombre = "Agora", Ubicacion = geometryFactory.CreatePoint(new Coordinate(-69.9388777, 18.4839233))
                    }
                };

                context.AddRange(salasDeCine);
                await context.SaveChangesAsync();
            }

            var filtro = new SalaDeCineCercanoFiltroDTO()
            {
                DistanciaEnKms = 5,
                Latitud        = 18.481139,
                Longitud       = -69.938950
            };

            using (var context = LocalDbDatabaseInitializer.GetDbContextLocalDb(false))
            {
                var mapper     = ConfigurarAutoMapper();
                var controller = new SalasDeCineController(context, mapper, geometryFactory);
                var respuesta  = await controller.Cercanos(filtro);

                var valor = respuesta.Value;
                Assert.AreEqual(2, valor.Count);
            }
        }
示例#2
0
        public async Task <ActionResult <List <SalaDeCineCercanoDTO> > > Cercanos([FromQuery] SalaDeCineCercanoFiltroDTO filtro)
        {
            var ubicacionUsuario = geometryFactory.CreatePoint(new Coordinate(filtro.Longitud, filtro.Latitud));
            var salasDeCine      = await context.SalasDeCine
                                   .OrderBy(x => x.Ubicacion.Distance(ubicacionUsuario))
                                   .Where(x => x.Ubicacion.IsWithinDistance(ubicacionUsuario, filtro.DistanciaEnKms * 100))
                                   .Select(x => new SalaDeCineCercanoDTO
            {
                Id                = x.Id,
                Nombre            = x.Nombre,
                Latitud           = x.Ubicacion.Y,
                Longitud          = x.Ubicacion.X,
                DistanciaEnMetros = Math.Round(x.Ubicacion.Distance(ubicacionUsuario))
            })
                                   .ToListAsync();

            return(salasDeCine);
        }