Ejemplo n.º 1
0
        public async Task <TotalResponseModel <AdminListItemUser> > GetUsers(AdminFilterModel model)
        {
            string text = model.Search?.Trim();

            if (!string.IsNullOrEmpty(text))
            {
                text = $"%{text}%";
            }

            var query = _context.Users.AsNoTracking().Where(x => string.IsNullOrEmpty(model.Search) || EF.Functions.ILike(x.Name, text));

            Expression <Func <ApplicationUser, object> > orderExp = x => x.Id;

            orderExp = model.Sort switch {
                "name" => x => x.Name,
                "role" => x => _userManager.GetRolesAsync(x).Result.First(),
                "date" => x => x.CreatedAt,
                _ => x => x.Id
            };

            int total = await query.CountAsync();

            query = model.Sort == "date" ? query.OrderByDescending(orderExp)
       : query.OrderBy(orderExp);


            var users = await query.PaginateAsync(model);

            var result = new List <AdminListItemUser>();

            foreach (var item in users)
            {
                result.Add(new AdminListItemUser {
                    Id        = item.Id,
                    CreatedAt = item.CreatedAt,
                    Email     = item.Email,
                    IsBlock   = item.IsBlock,
                    Name      = item.Name,
                    Phone     = item.PhoneNumber,
                    Role      = (await _userManager.GetRolesAsync(item)).First()
                });
            }

            return(new TotalResponseModel <AdminListItemUser> {
                Total = total,
                Items = result
            });
        }
        public async Task <TotalResponseModel <AdminRestaurantItem> > GetRestaurantsAsync(AdminFilterModel model)
        {
            string text = model.Search?.Trim();

            if (!string.IsNullOrEmpty(text))
            {
                text = $"%{text}%";
            }

            var query = _context.Restaurants
                        .AsNoTracking()
                        .Where(x => string.IsNullOrEmpty(model.Search) ||
                               EF.Functions.ILike(x.Name, text));

            Expression <Func <RestaurantEntity, object> > orderExp = x => x.Id;

            orderExp = model.Sort switch {
                "name" => x => x.Name,
                "popular" => x => x.Rating,
                _ => x => x.Id
            };

            query = model.Sort == "popular" ? query.OrderByDescending(orderExp)
       : query.OrderBy(orderExp);

            var restaurants = await query.PaginateAsync(model);

            return(new TotalResponseModel <AdminRestaurantItem> {
                Total = await query.CountAsync(),
                Items = _mapper.Map <List <AdminRestaurantItem> >(restaurants)
            });
        }
        public async Task <IActionResult> GetAll([FromQuery] AdminFilterModel model)
        {
            TotalResponseModel <AdminRestaurantItem> result = await _restaurantService.GetRestaurantsAsync(model);

            return(Ok(result));
        }
        public async Task <IActionResult> Users([FromQuery] AdminFilterModel model)
        {
            TotalResponseModel <AdminListItemUser> result = await _adminService.GetUsers(model);

            return(Ok(result));
        }