public IActionResult create(Hero person)
        {
            _dbContext.Heroes.Add(person);
            _dbContext.SaveChanges();

            return(CreatedAtRoute("GetHero", new { id = person.Id }, person));
        }
        public HeroesController(HeroesDbContext heroes)
        {
            _dbContext = heroes;

            if (!_dbContext.Heroes.Any())
            {
                //create a new hero if collection is empty
                //which means you cant delete all heroes
                _dbContext.Heroes.Add(new Hero {
                    Name = "Hero11"
                });
                _dbContext.Heroes.Add(new Hero {
                    Name = "Hero12"
                });
                _dbContext.Heroes.Add(new Hero {
                    Name = "Hero13"
                });
                _dbContext.Heroes.Add(new Hero {
                    Name = "Hero14"
                });
                _dbContext.Heroes.Add(new Hero {
                    Name = "Hero15"
                });
                _dbContext.SaveChanges();
            }
        }
        private Task UpdatePowers(HeroesDbContext context, IHeroService heroService)
        {
            var powers = context.HeroPowers.Include(hp => hp.Power).Where(hp => hp.LastTrainingTime != null || hp.LastChangeTime != null).ToList();

            foreach (var heroPower in powers)
            {
                var timePassed  = DateTime.Now.Subtract(heroPower.LastChangeTime.GetValueOrDefault()).TotalHours;
                var timeChanged = Convert.ToInt32(Math.Floor(timePassed));

                if (timeChanged < Constants.HERO_POWER_MIN_CHANGE_TIME)
                {
                    continue;
                }

                var percentage  = Math.Pow(0.8, timeChanged);
                var newStrength = Convert.ToInt32(Convert.ToDouble(heroPower.Strength) * percentage);

                heroPower.Strength       = newStrength;
                heroPower.LastChangeTime = DateTime.Now;

                context.HeroPowers.Update(heroPower);
                context.SaveChanges();
                heroService.ChangeOverallStrength(heroPower.HeroId);
            }
            return(Task.CompletedTask);
        }
        public void ChangeOverallStrength(int id)
        {
            var hero = _context.Heroes.Include(h => h.Powers).Include(h => h.MainPower).First(h => h.Id == id);

            hero.OverallStrength = hero.Powers.Aggregate(0, (acc, power) => acc += power.Strength);
            _context.Update(hero);
            _context.SaveChanges();
        }