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 static async Task <IList <VisitResponse> > GetVisitResponseFor(int userId) { using (var conn = ContextProvider.Instance.Conn) { var visits = await conn.QueryAsync <Visit>( @"SELECT * FROM Visits v WHERE v.UserId = @UserId", new { UserId = userId }); var response = new List <VisitResponse>(); foreach (var visit in visits) { var riskyInteractions = await RiskAccess.GetRiskyVisitsFor(visit); response.Add(new VisitResponse() { Address = visit.Address, CheckIn = visit.CheckIn, CheckOut = visit.CheckOut, Latitude = visit.Latitude, Longitude = visit.Longitude, PlaceName = visit.PlaceName, VisitId = visit.VisitId, AtRisk = visit.AtRisk, RiskyInteractions = riskyInteractions == null ? 0 : riskyInteractions.Count() }); } return(response); } }
public async Task <ActionResult <string> > Create([FromBody] VisitRequest request) { var user = await DataAccess.Get <User, int>(request.UserId); var entity = await request.ToPersistedData(); entity.AtRisk = user.AtRisk; await entity.Insert(); var riskyVisits = await RiskAccess.GetRiskyVisitsFor(entity); var response = JsonConvert.SerializeObject(riskyVisits); return(new OkObjectResult(response)); }
public async Task<ActionResult> MarkAsPositive([FromBody] UserAtRiskRequest request) { var userId = request.UserId; User user = null; // You can only mark yourself as having corona if (UserUtilities.GetUserId(httpContextAccessor.HttpContext.User) != userId) { return Unauthorized(); } try { user = await DataAccess.Get<User, int>(userId); if (user.AtRisk) { return new OkResult(); } } catch { return Unauthorized(); } request.ToPersistedData(user); var targetedDay = DateTime.Today.AddDays(-18); await VisitAccess.UpdateVisitStatus(userId, targetedDay); user.AtRisk = true; await user.UpdateAsync(); try { var affectedUserIds = await RiskAccess.GetUsersAffectedBy(userId, targetedDay); await RiskAccess.PrepareUsersForNotification(affectedUserIds, DateTime.Now); } catch (Exception ex) { throw new Exception("Failed to notify user", ex); } return new OkResult(); }