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