public async Task <ActionResult <IList <RiskyVisitResponse> > > GetForVisit([FromQuery] int visitId) { var visit = await DataAccess.Get <Visit, int>(visitId); var visits = await RiskAccess.GetRiskyVisitsFor(visit); var response = new List <RiskyVisitResponse>(); foreach (var item in visits) { var distance = GPSExtensions.GetDistanceInMeters(visit.Longitude, visit.Latitude, item.Longitude, item.Latitude); var riskyVisit = new RiskyVisitResponse() { VisitId = item.VisitId, Address = item.Address, CheckIn = item.CheckIn, CheckOut = item.CheckOut.GetValueOrDefault(item.CheckIn), Latitude = item.Latitude, Longitude = item.Longitude, DistanceInKm = Convert.ToInt32(distance) }; response.Add(riskyVisit); } return(new OkObjectResult(response.OrderBy(r => r.DistanceInKm))); }
public async Task <ActionResult <RiskyVisitResponse> > GetRisks([FromQuery] int userId, [FromQuery] double lat, [FromQuery] double lng, [FromQuery] DateTime?from, [FromQuery] DateTime?to) { var claimUserId = UserUtilities.GetUserId(httpContextAccessor.HttpContext.User); if (claimUserId != userId) { //return Unauthorized(); } var riskyVisits = await UserAccess.GetAtRiskVisits(userId, from, to); var riskyResponse = new List <RiskyVisitResponse>(); var groupedRiskyVisits = new Dictionary <int, RiskyVisitResponse>(); if (riskyVisits.Count > 0) { foreach (var visit in riskyVisits.OrderBy(v => v.VisitId).ToList()) { if (!groupedRiskyVisits.ContainsKey(visit.VisitId)) { var riskyVisit = new RiskyVisitResponse() { VisitId = visit.VisitId, Address = visit.Address, CheckIn = visit.CheckIn, CheckOut = visit.CheckOut, Latitude = visit.Latitude, Longitude = visit.Longitude, DistanceInKm = 0, LinkedVisits = new List <RiskyVisitResponse>() }; groupedRiskyVisits.Add(visit.VisitId, riskyVisit); } var distance = GPSExtensions.GetDistanceInMeters(visit.Longitude, visit.Latitude, visit.Longitude2, visit.Latitude2); var relatedVisit = new RiskyVisitResponse() { Address = visit.Address2, Latitude = visit.Latitude2, Longitude = visit.Longitude2, CheckIn = visit.CheckIn2, CheckOut = visit.CheckOut2, DistanceInKm = Convert.ToInt32(distance) }; groupedRiskyVisits[visit.VisitId].LinkedVisits.Add(relatedVisit); } } var response = groupedRiskyVisits.Select(g => g.Value).ToList(); return(new OkObjectResult(response)); }