public async Task <ListResponse <ProjectResponse> > RunAsync(ProjectFilter filter, ListOptions options)
        {
            //Mapper.Initialize(cfg => cfg.CreateMap<Project, ProjectResponse>()
            //                            .ForMember("OpenTasksCount", otc => otc.MapFrom(src => src.Tasks.Count(t => t.Status != Entities.TaskStatus.Completed))));

            IQueryable <ProjectResponse> query = _context.Projects
                                                 .Select(p => Mapper.Map <ProjectResponse>(p));

            //{
            //    Id = p.Id,
            //    Name = p.Name,
            //    Description = p.Description,
            //    OpenTasksCount = p.Tasks.Count(t => t.Status != Entities.TaskStatus.Completed)
            //}

            query = ApplyFilter(query, filter);
            int totalCount = await query.CountAsync();

            if (options.Sort == null)
            {
                options.Sort = "Id";
            }

            query = options.ApplySort(query);
            query = options.ApplyPaging(query);

            return(new ListResponse <ProjectResponse>
            {
                Items = await query.ToListAsync(),
                Page = options.Page,
                PageSize = options.PageSize ?? totalCount,
                Sort = options.Sort,
                TotalItemsCount = totalCount
            });
        }
        public async Task <ListResponse <TaskResponse> > RunAsync(TaskFilter filter, ListOptions options)
        {
            var task = _context.Tasks
                       .Include(t => t.Tags).ThenInclude(tt => tt.Tag)
                       .Include(p => p.Project);

            IQueryable <TaskResponse> query = task
                                              .Select(p => Mapper.Map <TaskResponse>(p));


            query = ApplyFilter(query, filter);
            int totalCount = await query.CountAsync();

            if (options.Sort == null)
            {
                options.Sort = "Id";
            }

            query = options.ApplySort(query);
            query = options.ApplyPaging(query);

            return(new ListResponse <TaskResponse>
            {
                Items = await query.ToListAsync(),
                Page = options.Page,
                PageSize = options.PageSize ?? totalCount,
                Sort = options.Sort,
                TotalItemsCount = totalCount
            });
        }
Exemple #3
0
        public async Task <ListResponse <TagResponse> > RunAsync(TagFilter filter, ListOptions options)
        {
            var tags = _uow.Tags.Query(t => t.Tasks);

            foreach (var tag in tags)
            {
                tag.Tasks = _uow.TagsInTasks.Query(t => t.Task).Where(t => t.TagId == tag.Id).ToList();
            }

            await _factory.CreateAsyncQueryable(tags).LoadAsync();

            var query = tags.ProjectTo <TagResponse>();

            query = ApplyFilter(query, filter);
            int totalCount = await _factory.CreateAsyncQueryable(query).CountAsync();

            if (options.Sort == null)
            {
                options.Sort = "Name";
            }

            query = options.ApplySort(query);

            query = options.ApplyPaging(query);

            return(new ListResponse <TagResponse>
            {
                Items = await _factory.CreateAsyncQueryable(query).ToListAsync(),
                Page = options.Page,
                PageSize = options.PageSize ?? totalCount,
                Sort = options.Sort,
                TotalItemsCount = totalCount
            });
        }
Exemple #4
0
        public async Task <ListResponse <ProjectResponse> > RunAsync(ProjectFilter filter, ListOptions options)
        {
            IQueryable <ProjectResponse> query = Context.Set <Project>()
                                                 .Select(p => new ProjectResponse
            {
                Id             = p.Id,
                Name           = p.Name,
                Description    = p.Description,
                OpenTasksCount = p.Tasks.Count(t => t.Status != Entities.TaskStatus.Completed)
            });

            query = ApplyFilter(query, filter);
            int totalCount = await query.CountAsync();

            if (options.Sort == null)
            {
                options.Sort = "Id";
            }

            query = options.ApplySort(query);
            query = options.ApplyPaging(query);

            return(new ListResponse <ProjectResponse>
            {
                Items = await query.ToListAsync(),
                Page = options.Page,
                PageSize = options.PageSize ?? totalCount,
                Sort = options.Sort,
                TotalItemsCount = totalCount
            });
        }
        public async Task <ListResponse <ProjectResponse> > RunAsync(ProjectFilter filter, ListOptions options)
        {
            var q = _uow.Projects.Query(t => t.Tasks, t => t.User);
            await _factory.CreateAsyncQueryable(q).LoadAsync();

            var query = q.ProjectTo <ProjectResponse>();

            query = ApplyFilter(query, filter);
            int totalCount = await _factory.CreateAsyncQueryable(query).CountAsync();

            if (options.Sort == null)
            {
                options.Sort = "Id";
            }

            query = options.ApplySort(query);
            query = options.ApplyPaging(query);

            return(new ListResponse <ProjectResponse>
            {
                Items = await _factory.CreateAsyncQueryable(query).ToListAsync(),
                Page = options.Page,
                PageSize = options.PageSize ?? totalCount,
                Sort = options.Sort,
                TotalItemsCount = totalCount
            });
        }
        public async Task <ListResponse <TaskResponse> > RunAsync(TaskFilter filter, ListOptions options)
        {
            int totalCount = 0;
            var tasks      = _uow.Tasks.Query(t => t.Tags, t => t.Project.Tasks, t => t.Project.User);

            foreach (var task in tasks)
            {
                task.Tags = _uow.TagsInTasks.Query(t => t.Tag).Where(t => t.TaskId == task.Id).ToList();
            }

            await _factory.CreateAsyncQueryable(tasks).LoadAsync();

            var query = tasks.ProjectTo <TaskResponse>();

            query      = ApplyFilter(query, filter);
            totalCount = query.Count();
            //после фильтрации по тегу происходит какая-то магия и ассинхронные функции перестают работать
            //totalCount = await query.CountAsync();


            if (options.Sort == null)
            {
                options.Sort = "Id";
            }

            query = options.ApplySort(query);
            query = options.ApplyPaging(query);


            return(new ListResponse <TaskResponse>
            {
                Items = query.ToList(),
                Page = options.Page,
                PageSize = options.PageSize ?? totalCount,
                Sort = options.Sort,
                TotalItemsCount = totalCount
            });
        }
Exemple #7
0
        public async Task <ListResponse <AccountResponse> > RunAsync(AccountFilter filter, ListOptions options)
        {
            IQueryable <AccountResponse> query = _context.Accounts.Select(t => new AccountResponse
            {
                Balance = t.Balance,
                Name    = t.Name,
                Id      = t.Id
            });

            query = ApplyFilter(query, filter);
            int totalCount = await query.CountAsync();

            query = options.ApplySort(query);
            query = options.ApplyPaging(query);
            return(new ListResponse <AccountResponse>
            {
                TotalItemsCount = totalCount,
                Items = await query.ToListAsync(),
                Page = options.Page,
                PageSize = options.PageSize ?? -1,
                Sort = options.Sort ?? "-Id"
            });
        }
Exemple #8
0
        public async Task <ListResponse <UserResponse> > RunAsync(UserFilter filter, ListOptions options)
        {
            IQueryable <UserResponse> query = _context.Users
                                              .ProjectTo <UserResponse>();

            query = ApplyFilter(query, filter);
            int totalCount = await query.CountAsync();

            if (options.Sort == null)
            {
                options.Sort = "Id";
            }

            query = options.ApplySort(query);
            query = options.ApplyPaging(query);
            return(new ListResponse <UserResponse>
            {
                Items = await query.ToListAsync(),
                Page = options.Page,
                PageSize = options.PageSize ?? -1,
                Sort = options.Sort ?? "-Id",
                TotalItemsCount = totalCount
            });
        }
Exemple #9
0
        public async Task <ListResponse <ProjectResponse> > RunAsync(ProjectFilter filter, ListOptions options)
        {
            using (var con = _connection.GetConnection())
            {
                var projectsDictionary = new Dictionary <int, Project>();

                var cmd = "select * from Projects p left join Tasks t on p.Id=t.ProjectId";
                con.Query <Project, Task, Project>(cmd, (pr, task) =>
                {
                    Project project;
                    if (!projectsDictionary.TryGetValue(pr.Id, out project))
                    {
                        project       = pr;
                        project.Tasks = new List <Task>();
                        projectsDictionary.Add(project.Id, project);
                    }

                    project = projectsDictionary[pr.Id];
                    if (task != null)
                    {
                        project.Tasks.Add(task);
                    }

                    return(project);
                });

                var projects = projectsDictionary.Values.ToList();
                var prs      = new List <ProjectResponse>();
                foreach (var pr in projects)
                {
                    prs.Add(new ProjectResponse
                    {
                        Id             = pr.Id,
                        Name           = pr.Name,
                        Description    = pr.Description,
                        OpenTasksCount = pr.OpenTasksCount
                    });
                }
                IQueryable <ProjectResponse> query = prs.AsQueryable();

                query = ApplyFilter(query, filter);

                int totalCount = query.Count();

                if (options.Sort == null)
                {
                    options.Sort = "Id";
                }

                query = options.ApplySort(query);
                query = options.ApplyPaging(query);

                return(new ListResponse <ProjectResponse>
                {
                    Items = query.ToList(),
                    Page = options.Page,
                    PageSize = options.PageSize ?? totalCount,
                    Sort = options.Sort,
                    TotalItemsCount = totalCount
                });
            }
        }