示例#1
0
        public async Task <ActionResult <List <NearbyCinemaDTO> > > GetNearbyCinema([FromQuery] NearbyCinemaFilterDTO filter)
        {
            var userUbication = this.geometryFactory.CreatePoint(new Coordinate(filter.Longitude, filter.Latitude));

            var distanceInMts = filter.DistanceInKms * 1000;
            var cinemas       = await this.context.Cinemas
                                .OrderBy(x => x.Ubication.Distance(userUbication))
                                .Where(x => x.Ubication.IsWithinDistance(userUbication, distanceInMts))
                                .Select(x => new NearbyCinemaDTO
            {
                Id            = x.Id,
                Name          = x.Name,
                Latitude      = x.Ubication.Y,
                Longitude     = x.Ubication.X,
                DistanceInMts = Math.Round(x.Ubication.Distance(userUbication))
            })
                                .ToListAsync();

            return(cinemas);
        }
示例#2
0
        public async Task GetCinema5KmOrLess()
        {
            var geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326);

            using (var context = LocalDbDatabaseInitializer.GetDbContextLocalDb(false))
            {
                var cinemas = new List <Cinema>()
                {
                    new Cinema {
                        Name = "Agora", Ubication = geometryFactory.CreatePoint(new Coordinate(-69.9388777, 18.4839233))
                    },
                    new Cinema {
                        Name = "Agora 2", Ubication = geometryFactory.CreatePoint(new Coordinate(-69.927275, 18.478026))
                    }
                };

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

            var filter = new NearbyCinemaFilterDTO()
            {
                DistanceInKms = 5,
                Latitude      = 18.481139,
                Longitude     = -69.938950
            };

            using (var context = LocalDbDatabaseInitializer.GetDbContextLocalDb(false))
            {
                var mapper     = ConfigurationAutoMapper();
                var controller = new CinemasController(context, mapper, geometryFactory);
                var response   = await controller.GetNearbyCinema(filter);

                var value = response.Value;
                Assert.AreEqual(2, value.Count);
            }
        }