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(); }
public async Task<ActionResult> MarkAsRecovered([FromBody] UserAtRiskRequest request) { var userId = request.UserId; User user = null; try { user = await DataAccess.Get<User, int>(userId); if (!user.AtRisk) { return new OkResult(); } } catch { return Unauthorized(); } user.AtRisk = false; await user.UpdateAsync(); return new OkResult(); }