Beispiel #1
0
        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();
        }
Beispiel #2
0
        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();
        }