Ejemplo n.º 1
0
        public async Task <IActionResult> Dragons(string name, int minCurHealth = 0, int maxCurHealth        = Dragon.MAX_HEALTH + 1,
                                                  int minHealth       = Dragon.MIN_HEALTH - 1, int maxHealth = Dragon.MAX_HEALTH + 1, //фильтры
                                                  int page            = 1,                                                            //пагинация
                                                  SortState sortOrder = SortState.NameAsc)                                            //сортировка
        {
            var id   = GetHeroIdFromToken((Request.Cookies[_tokenName]));
            var hero = _context.Heroes.ToList().FirstOrDefault(h => h.Id == id);

            if (hero != null)
            {
                IEnumerable <DragonInfoModel> dragons = GetDragonInfoList(await _context.Dragons.ToListAsync(), hero.Id).Where(d => d.CurrentHealth > 0);
                //фильтрация
                if (!string.IsNullOrWhiteSpace(name))
                {
                    dragons = dragons.Where(p => p.Name.ToLower().StartsWith(name.ToLower()));                  //если имя начинается с указаной строки БЕЗ учета регистра
                }
                dragons = dragons.Where(d => d.CurrentHealth > minCurHealth && d.CurrentHealth < maxCurHealth); //текущие жизни
                dragons = dragons.Where(d => d.AllHealth > minHealth && d.CurrentHealth < maxHealth);           //начальные жизни
                // сортировка
                switch (sortOrder)
                {
                case SortState.NameDesc:
                    dragons = dragons.OrderByDescending(s => s.Name);
                    break;

                default:
                    dragons = dragons.OrderBy(s => s.Name);
                    break;
                }
                // пагинация
                var count = dragons.Count();
                var items = dragons.Skip((page - 1) * PAGE_SIZE).Take(PAGE_SIZE).ToList();
                // формируем модель представления
                DragonViewModel viewModel = new DragonViewModel
                {
                    PageViewModel   = new PageViewModel(count, page, PAGE_SIZE),
                    SortViewModel   = new SortModel(sortOrder),
                    FilterViewModel = new DragonFilterModel(name, minCurHealth, maxCurHealth, minHealth, maxHealth),
                    Dragons         = items
                };
                ViewData["menu-title"] = "Драконы";
                ViewData["hero"]       = hero;
                return(View(viewModel));
            }
            else
            {
                return(RedirectToAction("Index"));
            }
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> Stat(int page = 1, SortState sortOrder = SortState.NameAsc)
        {
            var id   = GetHeroIdFromToken((Request.Cookies[_tokenName]));
            var hero = _context.Heroes.ToList().FirstOrDefault(h => h.Id == id);

            if (hero != null)
            {
                IEnumerable <DragonInfoModel> dragons = GetDragonInfoList(await _context.Dragons.ToListAsync(), hero.Id).Where(d => d.AmountHeroDamageForThisDragon > 0);
                // сортировка
                switch (sortOrder)
                {
                case SortState.NameDesc:
                    dragons = dragons.OrderByDescending(s => s.Name);
                    break;

                case SortState.DamageDesc:
                    dragons = dragons.OrderByDescending(s => s.AmountHeroDamageForThisDragon);
                    break;

                case SortState.DamageAsc:
                    dragons = dragons.OrderBy(s => s.AmountHeroDamageForThisDragon);
                    break;

                default:
                    dragons = dragons.OrderBy(s => s.Name);
                    break;
                }
                // пагинация
                var count = dragons.Count();
                var items = dragons.Skip((page - 1) * PAGE_SIZE).Take(PAGE_SIZE).ToList();
                // формируем модель представления
                DragonViewModel viewModel = new DragonViewModel
                {
                    PageViewModel = new PageViewModel(count, page, PAGE_SIZE),
                    SortViewModel = new SortModel(sortOrder),
                    Dragons       = items
                };
                ViewData["menu-title"] = $"Статистика героя {hero.Name}";
                ViewData["hero"]       = hero;
                return(View(viewModel));
            }
            else
            {
                return(RedirectToAction("Index"));
            }
        }