コード例 #1
0
        /// <summary>
        /// will return intimidatorId summery and save result on _distributedCache
        /// </summary>
        /// <returns>List<IntimidatorWorkdayDto></returns>
        public async Task <List <IntimidatorWorkdayDto> > ReadAndCacheAsync()
        {
            var results = await _intimidatorWorkdayRepository.GetDailyWork(intimidatorId);

            var doors = await _doorRepository.SelectAsync(results.Select(d => d.DoorId).ToList());

            var intimidator = await _intimidatorRepository.SelectAsync(intimidatorId, null);

            ILookup <DateTime, IntimidatorIntimidation> days =
                results
                .ToLookup(p => p.Day);


            List <IntimidatorWorkdayDto> workdays = new List <IntimidatorWorkdayDto>();

            foreach (var day in days)
            {
                List <int> doorIds         = days[day.Key].Select(d => d.DoorId).ToList();
                List <int> doorIdsDepleted = days[day.Key].Where(d => d.Depleted).Select(d => d.DoorId).ToList();

                var doorsForCurrentDay         = doors.Where(door => doorIds.Contains(door.Id)).ToList();
                var doorsDepletedForCurrentDay = doors.Where(door => doorIdsDepleted.Contains(door.Id)).ToList();

                var workDayEnergy = doorsDepletedForCurrentDay.Sum(e => e.Energy);

                TimeSpan span = Time.GetSystemNow() - intimidator.StartToScareData;

                IntimidatorWorkdayDto workday = new IntimidatorWorkdayDto()
                {
                    Doors            = doorsForCurrentDay,
                    Day              = day.Key,
                    DailyEnergy      = workDayEnergy,
                    GoalAccomplished = new CalculateEnergy(span.Days, workDayEnergy).IsWorkdayEnergyValid()
                };

                workdays.Add(workday);
            }

            await _distributedCache.SetStringAsync(GetWorkdaysCacheKey(), JsonSerializer.Serialize(workdays));

            return(workdays);
        }