Пример #1
0
        public async Task <(IEnumerable <Order>, int)> GetOrdersByUserIdAsync(string userId, PaginationFilterModel pagination)
        {
            var result = await _dbSet
                         .Include(orderItem => orderItem.OrderItems)
                         .ThenInclude(printingEdition => printingEdition.PrintingEdition)
                         .Where(order => order.UserId == userId)
                         .OrderByDescending(orderBy => orderBy.CreateDate)
                         .ToListAsync();

            int countElement = result.Count();

            result = result.Skip((pagination.PageNumber - Constants.Page.PAGE_NUMBER) * pagination.PageSize).Take(pagination.PageSize).ToList();

            (IEnumerable <Order>, int)tupleResult = (result, countElement);

            return(tupleResult);
        }
Пример #2
0
        public async Task <(IEnumerable <PrintingEdition>, int)> GetFilteredPrintingEditionsAsync(PrintingEditionFilterModel model, PaginationFilterModel pagination)
        {
            var result = await _dbSet
                         .Include(authorInPe => authorInPe.AuthorInPrintingEdition)
                         .ThenInclude(author => author.Author)
                         .Where(printingEdition => model.Category == null || model.Category.Contains(printingEdition.Type))
                         .Where(printingEdition => model.PrintingEditionName == null || EF.Functions.Like(printingEdition.Title, $"%{model.PrintingEditionName}%"))
                         .Where(printingEdition => (model.MinPrice == null || model.MaxPrice == null) || (printingEdition.Price >= model.MinPrice && printingEdition.Price <= model.MaxPrice))
                         .Where(printingEdition => model.AuthorName == null || printingEdition.AuthorInPrintingEdition
                                .Any(author => EF.Functions.Like(author.Author.Name, $"%{model.AuthorName}%")))
                         .OrderBy($"{model.SortBy} {model.TypeSort}")
                         .ToListAsync();

            int countElement = result.Count();

            result = result.Skip((pagination.PageNumber - Constants.Page.PAGE_NUMBER) * pagination.PageSize).Take(pagination.PageSize).ToList();

            (IEnumerable <PrintingEdition>, int)tupleResult = (result, countElement);

            return(tupleResult);
        }
Пример #3
0
        public async Task <(IEnumerable <Order>, int)> GetOrdersByUserIdAsync(string userId, PaginationFilterModel pagination)
        {
            using (var connection = CreateConnection())
            {
                var sql = new StringBuilder();
                sql.Append($"SELECT o.*, pe.*, orderItem.Id, orderItem.Count FROM Orders AS o");
                sql.Append($" INNER JOIN OrderItems AS orderItem on orderItem.OrderId = o.Id");
                sql.Append($" INNER JOIN PrintingEditions AS pe on orderItem.PrintingEditionId = pe.Id");
                sql.Append($" ORDER BY o.Id DESC");

                var orders = await connection.QueryAsync <Order, PrintingEdition, OrderItem, Order>(sql.ToString(),
                                                                                                    (order, printingEdition, orderItem) =>
                {
                    orderItem.PrintingEdition = printingEdition;
                    order.OrderItems.Add(orderItem);

                    return(order);
                },
                                                                                                    splitOn : "Id");

                var groupedOrders = orders.GroupBy(order => order.Id).Select(groupOrder =>
                {
                    var groupedOrder        = groupOrder.First();
                    groupedOrder.OrderItems = groupOrder.Select(order => order.OrderItems.FirstOrDefault()).ToList();;
                    return(groupedOrder);
                });

                int countElement = orders.Count();

                groupedOrders = groupedOrders.Skip((pagination.PageNumber - Constants.Page.PAGE_NUMBER) * pagination.PageSize).Take(pagination.PageSize).ToList();

                (IEnumerable <Order>, int)tupleResult = (groupedOrders, countElement);

                return(tupleResult);
            }
        }
Пример #4
0
        public async Task <(IEnumerable <Order>, int)> GetFilteredOrdersAsync(OrderFilterModel model, PaginationFilterModel pagination)
        {
            var result = await _dbSet.Include(user => user.User)
                         .Include(orderItem => orderItem.OrderItems)
                         .ThenInclude(printingEdition => printingEdition.PrintingEdition)
                         .Where(order => model.Status == null || order.Status == model.Status)
                         .OrderBy($"{model.SortBy} {model.TypeSort}")
                         .ToListAsync();

            int countElement = result.Count();

            result = result.Skip((pagination.PageNumber - Constants.Page.PAGE_NUMBER) * pagination.PageSize).Take(pagination.PageSize).ToList();

            (IEnumerable <Order>, int)tupleResult = (result, countElement);

            return(tupleResult);
        }
Пример #5
0
 public static int GetItemsToTake(this PaginationFilterModel paginationFilter)
 {
     return(paginationFilter.PageSize);
 }
Пример #6
0
        public async Task <(IEnumerable <Order>, int)> GetFilteredOrdersAsync(OrderFilterModel model, PaginationFilterModel pagination)
        {
            using (var connection = CreateConnection())
            {
                var status = new StringBuilder();

                if (model.Status is not null)
                {
                    status.Append((int)model.Status);
                }

                var sql = new StringBuilder();
                sql.Append($"SELECT o.* , us.* , pe.*, orderItem.Id, orderItem.Count FROM Orders AS o");
                sql.Append($" INNER JOIN AspNetUsers AS us on us.Id = o.UserId");
                sql.Append($" INNER JOIN OrderItems AS orderItem on orderItem.OrderId = o.Id");
                sql.Append($" INNER JOIN PrintingEditions AS pe on orderItem.PrintingEditionId = pe.Id");
                sql.Append($" WHERE ((@status = '' OR @status = null) OR o.Status = @status)");

                var orders = await connection.QueryAsync <Order, User, PrintingEdition, OrderItem, Order>(sql.ToString(),
                                                                                                          (order, user, printingEdition, orderItem) =>
                {
                    order.User = user;
                    orderItem.PrintingEdition = printingEdition;

                    order.OrderItems.Add(orderItem);
                    return(order);
                },
                                                                                                          new { status = status.ToString() },
                                                                                                          splitOn : "Id");

                var groupedOrders = orders.GroupBy(order => order.Id).Select(groupOrder =>
                {
                    var groupedOrder        = groupOrder.First();
                    groupedOrder.OrderItems = groupOrder.Select(order => order.OrderItems.Single()).ToList();
                    return(groupedOrder);
                });

                int countElement = orders.Count();

                groupedOrders = groupedOrders.Skip((pagination.PageNumber - Constants.Page.PAGE_NUMBER) * pagination.PageSize).Take(pagination.PageSize).ToList();

                (IEnumerable <Order>, int)tupleResult = (groupedOrders, countElement);

                return(tupleResult);
            }
        }
Пример #7
0
 public static int GetItemsToSkip(this PaginationFilterModel paginationFilter)
 {
     return((paginationFilter.PageNumber - 1) * paginationFilter.PageSize);
 }
Пример #8
0
        public async Task <(IEnumerable <User>, int)> GetFilteredUsersAsync(UserFilterModel model, PaginationFilterModel pagination)
        {
            var result = await _dbSet
                         .Where(user => model.UserName == null || EF.Functions.Like(user.FirstName, $"%{model.UserName}%") || EF.Functions.Like(user.LastName, $"%{model.UserName}%"))
                         .Where(user => model.IsBlocked == null || user.IsBlocked == model.IsBlocked)
                         .ToListAsync();

            int countElement = result.Count();

            result = result.Skip((pagination.PageNumber - Constants.Page.PAGE_NUMBER) * pagination.PageSize).Take(pagination.PageSize).ToList();

            (IEnumerable <User>, int)tupleResult = (result, countElement);

            return(tupleResult);
        }
Пример #9
0
        public async Task <PagedResponse <AuthorModel> > GetFilteredAuthorsAsync(AuthorFilterModel model, PaginationFilterModel pagination)
        {
            if (string.IsNullOrWhiteSpace(model.SortBy) && string.IsNullOrWhiteSpace(model.TypeSort))
            {
                model.SortBy   = Constants.Sort.DefaultSortById;
                model.TypeSort = Constants.Sort.DefaultSortByAsc;
            }

            (IEnumerable <Author> authors, int count)tupleAuthors = await _authorRepository.GetFilteredAuthorsAsync(model, pagination);

            var authorModel = _autoMapper.Map <IEnumerable <AuthorModel> >(tupleAuthors.authors);

            var pagedResponse = new PagedResponse <AuthorModel>
            {
                Data       = authorModel,
                PageNumber = pagination.PageNumber,
                PageSize   = pagination.PageSize,
                TotalItems = tupleAuthors.count
            };

            return(pagedResponse);
        }
Пример #10
0
        public async Task <(IEnumerable <Author>, int)> GetFilteredAuthorsAsync(AuthorFilterModel model, PaginationFilterModel pagination)
        {
            var result = await _dbSet
                         .Include(pe => pe.AuthorInPrintingEdition)
                         .ThenInclude(u => u.PrintingEdition)
                         .OrderBy($"{model.SortBy} {model.TypeSort}")
                         .Where(author => model.Name == null || EF.Functions.Like(author.Name, $"%{model.Name}%"))
                         .ToListAsync();

            int countElement = result.Count();

            result = result.Skip((pagination.PageNumber - Constants.Page.PAGE_NUMBER) * pagination.PageSize).Take(pagination.PageSize).ToList();

            var tupleResult = (result, countElement);

            return(tupleResult);
        }
Пример #11
0
        public async Task <(IEnumerable <Author>, int)> GetFilteredAuthorsAsync(AuthorFilterModel model, PaginationFilterModel pagination)
        {
            using (var connection = CreateConnection())
            {
                var sql = new StringBuilder();
                sql.Append("SELECT author.Id, author.Name, pe.*");
                sql.Append($" FROM Authors as author");
                sql.Append($" INNER JOIN AuthorInPrintingEditions as auInpe on author.Id = auInpe.AuthorId");
                sql.Append($" INNER JOIN PrintingEditions as pe on pe.Id = auInpe.PrintingEditionId");
                sql.Append($" WHERE ((@Name = '' OR @Name = null) OR Name LIKE @Name )");

                var authors = await connection.QueryAsync <Author, PrintingEdition, Author>(sql.ToString(),
                                                                                            (author, printingEdition) =>
                {
                    author.AuthorInPrintingEdition.Add(new AuthorInPrintingEdition {
                        PrintingEdition = printingEdition
                    });
                    return(author);
                },
                                                                                            new { Name = $"%{model.Name}%" },
                                                                                            splitOn : "Id");


                var groupedAuthors = authors.GroupBy(author => author.Id).Select(groupAuthor =>
                {
                    var groupedAuthor = groupAuthor.First();
                    groupedAuthor.AuthorInPrintingEdition = groupAuthor.Select(author => author.AuthorInPrintingEdition.FirstOrDefault()).ToList();
                    return(groupedAuthor);
                });

                int countElement = authors.Count();

                groupedAuthors = groupedAuthors.Skip((pagination.PageNumber - Constants.Page.PAGE_NUMBER) * pagination.PageSize).Take(pagination.PageSize).ToList();

                (IEnumerable <Author>, int)tupleResult = (groupedAuthors, countElement);

                return(tupleResult);
            }
        }