public async Task <UserTrackedItem> CreateOrUpdateTrackedItemAsync(TrackedFoodItem trackedItem, string userId)
        {
            var isNewItem = await CreateOrUpdateItemPreProcessingAsync(trackedItem, userId);

            trackedItem.Description = trackedItem.Name;
            trackedItem.ValidateValuesForSubmission(isNewItem);
            var userTask     = GetOrCreateUserFromDbAsync(userId);
            var insertedItem = await _elmDb.UpsertTrackedItem(trackedItem);

            await CreateOrUpdateItemPostProcessingAsync(trackedItem, await userTask);

            return(insertedItem);
        }
        private EffectsSummary GenerateFoodRecordRelatedData(TrackedFoodItem foodRecord, IEnumerable <TrackedBowelMovementItem> bowelMovRecords, IEnumerable <TrackedStomachSymptomItem> stomachSymRecords)
        {
            var time72HoursAgo   = foodRecord.TrackedTime.AddHours(-72);
            var time24HoursAgo   = foodRecord.TrackedTime.AddHours(-24);
            var time8HoursAgo    = foodRecord.TrackedTime.AddHours(-8);
            var time72HoursAfter = foodRecord.TrackedTime.AddHours(72);
            var time24HoursAfter = foodRecord.TrackedTime.AddHours(24);
            var time8HoursAfter  = foodRecord.TrackedTime.AddHours(8);

            var bowelRecords72HoursBefore = bowelMovRecords.Where(bm => bm.TrackedTime >= time72HoursAgo && bm.TrackedTime <= foodRecord.TrackedTime);
            var bowelRecords24HoursBefore = bowelRecords72HoursBefore.Where(bm => bm.TrackedTime >= time24HoursAgo);
            var bowelRecords8HoursBefore  = bowelRecords24HoursBefore.Where(bm => bm.TrackedTime >= time8HoursAgo);

            var bowelRecords72HoursAfter = bowelMovRecords.Where(bm => bm.TrackedTime <= time72HoursAfter && bm.TrackedTime >= foodRecord.TrackedTime);
            var bowelRecords24HoursAfter = bowelRecords72HoursAfter.Where(bm => bm.TrackedTime <= time24HoursAfter);
            var bowelRecords8HoursAfter  = bowelRecords24HoursAfter.Where(bm => bm.TrackedTime <= time8HoursAfter);

            var stomachRecords72HoursBefore = stomachSymRecords.Where(ss => ss.TrackedTime >= time72HoursAgo && ss.TrackedTime <= foodRecord.TrackedTime);
            var stomachRecords24HoursBefore = stomachRecords72HoursBefore.Where(ss => ss.TrackedTime >= time24HoursAgo);
            var stomachRecords8HoursBefore  = stomachRecords24HoursBefore.Where(ss => ss.TrackedTime >= time8HoursAgo);

            var stomachRecords72HoursAfter = stomachSymRecords.Where(ss => ss.TrackedTime <= time72HoursAfter && ss.TrackedTime >= foodRecord.TrackedTime);
            var stomachRecords24HoursAfter = stomachRecords72HoursBefore.Where(ss => ss.TrackedTime <= time24HoursAfter);
            var stomachRecords8HoursAfter  = stomachRecords24HoursBefore.Where(ss => ss.TrackedTime <= time8HoursAfter);

            var bowelRecords72HourAfterAverage = GenerateAverageBowelMovRecord(bowelRecords72HoursAfter);
            var bowelRecords24HourAfterAverage = GenerateAverageBowelMovRecord(bowelRecords24HoursAfter);
            var bowelRecords8HourAfterAverage  = GenerateAverageBowelMovRecord(bowelRecords8HoursAfter);

            var bowelRecords72HourBeforeAverage = GenerateAverageBowelMovRecord(bowelRecords72HoursBefore);
            var bowelRecords24HourBeforeAverage = GenerateAverageBowelMovRecord(bowelRecords24HoursBefore);
            var bowelRecords8HourBeforeAverage  = GenerateAverageBowelMovRecord(bowelRecords8HoursBefore);

            var bowelRecords72HourDelta = GenerateBowelMovDelta(bowelRecords72HourBeforeAverage, bowelRecords72HourAfterAverage);
            var bowelRecords24HourDelta = GenerateBowelMovDelta(bowelRecords24HourBeforeAverage, bowelRecords24HourAfterAverage);
            var bowelRecords8HourDelta  = GenerateBowelMovDelta(bowelRecords8HourBeforeAverage, bowelRecords8HourAfterAverage);

            var stomachRecords72HourAfterAverage = GenerateAverageStomachSymRecord(stomachRecords72HoursAfter);
            var stomachRecords24HourAfterAverage = GenerateAverageStomachSymRecord(stomachRecords24HoursAfter);
            var stomachRecords8HourAfterAverage  = GenerateAverageStomachSymRecord(stomachRecords8HoursAfter);

            var stomachRecords72HourBeforeAverage = GenerateAverageStomachSymRecord(stomachRecords72HoursBefore);
            var stomachRecords24HourBeforeAverage = GenerateAverageStomachSymRecord(stomachRecords24HoursBefore);
            var stomachRecords8HourBeforeAverage  = GenerateAverageStomachSymRecord(stomachRecords8HoursBefore);

            var stomachRecords72HourDelta = GenerateStomachSymDelta(stomachRecords72HourBeforeAverage, stomachRecords72HourAfterAverage);
            var stomachRecords24HourDelta = GenerateStomachSymDelta(stomachRecords24HourBeforeAverage, stomachRecords24HourAfterAverage);
            var stomachRecords8HourDelta  = GenerateStomachSymDelta(stomachRecords8HourBeforeAverage, stomachRecords8HourAfterAverage);

            return(new EffectsSummary()
            {
                BowelRecords72HourAfterAverage = bowelRecords72HourAfterAverage,
                BowelRecords24HourAfterAverage = bowelRecords24HourAfterAverage,
                BowelRecords8HourAfterAverage = bowelRecords8HourAfterAverage,

                BowelRecords72HourBeforeAverage = bowelRecords72HourBeforeAverage,
                BowelRecords24HourBeforeAverage = bowelRecords24HourBeforeAverage,
                BowelRecords8HourBeforeAverage = bowelRecords8HourBeforeAverage,

                BowelRecords72HourDelta = bowelRecords72HourDelta,
                BowelRecords24HourDelta = bowelRecords24HourDelta,
                BowelRecords8HourDelta = bowelRecords8HourDelta,

                StomachRecords72HourAfterAverage = stomachRecords72HourAfterAverage,
                StomachRecords24HourAfterAverage = stomachRecords24HourAfterAverage,
                StomachRecords8HourAfterAverage = stomachRecords8HourAfterAverage,

                StomachRecords72HourBeforeAverage = stomachRecords72HourBeforeAverage,
                StomachRecords24HourBeforeAverage = stomachRecords24HourBeforeAverage,
                StomachRecords8HourBeforeAverage = stomachRecords8HourBeforeAverage,

                StomachRecords72HourDelta = stomachRecords72HourDelta,
                StomachRecords24HourDelta = stomachRecords24HourDelta,
                StomachRecords8HourDelta = stomachRecords8HourDelta
            });
        }
Exemple #3
0
        public async Task <ActionResult <UserTrackedItem> > CreateOrUpdateTrackedFoodItemAsync([FromBody] TrackedFoodItem trackedItemObject)
        {
            var user = GetUserObjectFromClaims(HttpContext.User.Claims);

            return(await _trackItemBl.CreateOrUpdateTrackedItemAsync(trackedItemObject, user.ObjectId));
        }