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

            using (var context = LocalDbDatabaseInitializer.GetDbContextLocalDb())
            {
                var theaters = new List <MovieTheater>
                {
                    new MovieTheater {
                        Name = "Agora", Location = geometryFactory.CreatePoint(new Coordinate(-69.9388777, 18.4839233))
                    },
                    new MovieTheater {
                        Name = "Sambil", Location = geometryFactory.CreatePoint(new Coordinate(-69.9118804, 18.4826214))
                    },
                    new MovieTheater {
                        Name = "Megacentro", Location = geometryFactory.CreatePoint(new Coordinate(-69.856427, 18.506934))
                    },
                    new MovieTheater {
                        Name = "Village East Cinema", Location = geometryFactory.CreatePoint(new Coordinate(-73.986227, 40.730898))
                    }
                };

                context.AddRange(theaters);
                context.SaveChanges();
            }

            var filterMovieTheatersDTO = new FilterMovieTheatersDto()
            {
                DistanceInKms = 5,
                Lat           = 18.481139,
                Long          = -69.938950
            };

            using (var context = LocalDbDatabaseInitializer.GetDbContextLocalDb())
            {
                var controller = new MovieTheatersController(context);

                var response = await controller.Get(filterMovieTheatersDTO);

                var theatersFromController = response.Value;

                Assert.AreEqual(2, theatersFromController.Count);
            }
        }
Esempio n. 2
0
        public async Task <ActionResult <List <MovieTheaterDto> > > Get([FromQuery] FilterMovieTheatersDto filterMovieTheatersDto)
        {
            var geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326);

            var usersLocation = geometryFactory
                                .CreatePoint(new Coordinate(filterMovieTheatersDto.Long, filterMovieTheatersDto.Lat));

            var theaters = await context.MovieTheaters
                           .OrderBy(x => x.Location.Distance(usersLocation))
                           .Where(x => x.Location.IsWithinDistance(usersLocation, filterMovieTheatersDto.DistanceInKms * 1000))
                           .Select(x => new MovieTheaterDto
            {
                Id               = x.Id,
                Name             = x.Name,
                DistanceInMeters = Math.Round(x.Location.Distance(usersLocation))
            }).ToListAsync();

            return(theaters);
        }