Exemplo n.º 1
0
        public async Task <PagedList <UserModel> > GetUsersAsync(ListOptions listOptions, UserFilter filter)
        {
            var users = Context.Users.Include(u => u.Identity).AsQueryable();
            Expression <Func <User, bool> > predicate = null;

            if (filter != null)
            {
                if (filter.GroupId.HasValue)
                {
                    predicate = predicate.AndAlso(u => u.GroupId == filter.GroupId);
                }
                if (filter.RoleId.HasValue)
                {
                    predicate = predicate.AndAlso(u => u.Identity.RoleId == filter.RoleId);
                }
                if (filter.AccountVerified.HasValue)
                {
                    predicate.AndAlso(u => u.Identity.EmailConfirmed == filter.AccountVerified);
                }
                if (filter.CreateDateAfter.HasValue)
                {
                    predicate = predicate.AndAlso(u => u.Identity.RegistrationDate >= filter.CreateDateAfter);
                }
                if (filter.CreateDateAfter.HasValue)
                {
                    predicate = predicate.AndAlso(u => u.Identity.RegistrationDate <= filter.CreateDateBefore);
                }
                if (string.IsNullOrEmpty(filter.EmailQuery))
                {
                    predicate = predicate.AndAlso(u => u.Identity.Email.Contains(filter.EmailQuery));
                }
                if (string.IsNullOrEmpty(filter.NameQuery))
                {
                    predicate =
                        predicate.AndAlso(u => $"{u.SecondName} {u.FirstName} {u.Patronymic}".Contains(filter.NameQuery));
                }
            }

            int totalItemCount;

            if (predicate != null)
            {
                users          = users.Where(predicate);
                totalItemCount = await Context.Users.CountAsync(predicate);
            }
            else
            {
                totalItemCount = await Context.Users.CountAsync();
            }

            var result = listOptions.CreatePagedList <UserModel>(totalItemCount);

            users = listOptions.TakeFrom(users);

            var userList = await users.ToListAsync();

            result.AddRange(Mapper.Map <IEnumerable <User>, IEnumerable <UserModel> >(userList));
            return(result);
        }
        public async Task <PagedList <FileModel> > GetRepositoryFilesAsync(Guid repositoryId, ListOptions listOptions, RepositoryFileFilter filter = null)
        {
            IQueryable <File> files = Context.RepositoryFiles
                                      .Where(f => f.RepositoryId == repositoryId)
                                      .Select(f => f.File);

            Expression <Func <File, bool> > predicate = null;

            if (filter != null)
            {
                if (!string.IsNullOrWhiteSpace(filter.SearchString))
                {
                    predicate = predicate.AndAlso(f => f.FileName.ToLower().Contains(filter.SearchString.ToLower()));
                }
                if (!string.IsNullOrWhiteSpace(filter.Extension))
                {
                    predicate.AndAlso(f => f.FileName.Split('.').Last() == filter.Extension);
                }
                if (filter.UploadDateAfter.HasValue)
                {
                    predicate = predicate.AndAlso(f => f.UploadDate >= filter.UploadDateAfter.Value);
                }
                if (filter.UploadDateBefore.HasValue)
                {
                    predicate = predicate.AndAlso(f => f.UploadDate <= filter.UploadDateBefore);
                }
            }

            int count;

            if (predicate != null)
            {
                files = files.Where(predicate);
                count = await Context.FileModels.CountAsync(predicate);
            }
            else
            {
                count = await Context.FileModels.CountAsync();
            }

            var result = listOptions.CreatePagedList <FileModel>(count);

            if (count == 0)
            {
                return(result);
            }

            files = files.OrderBy(f => f.UploadDate);
            files = listOptions.TakeFrom(files);

            var list = await files.ToListAsync();

            result.AddRange(Mapper.Map <IEnumerable <File>, IEnumerable <FileModel> >(list));
            return(result);
        }
Exemplo n.º 3
0
        public async Task <PagedList <FileModel> > GetFilesAsync(ListOptions listOptions, FileFilter filter = null)
        {
            IQueryable <File> query = Context.FileModels;
            Expression <Func <File, bool> > predicate = null;

            if (filter != null)
            {
                if (!string.IsNullOrWhiteSpace(filter.SearchString))
                {
                    predicate = predicate.AndAlso(f => f.FileName.ToLower().Contains(filter.SearchString.ToLower()));
                }
                if (!string.IsNullOrWhiteSpace(filter.Extension))
                {
                    predicate.AndAlso(f => f.FileName.Split('.').Last() == filter.Extension);
                }
                if (filter.MessageId != null)
                {
                    predicate = predicate.AndAlso(f =>
                                                  f.Messages.Select(m => m.MessageId).Contains(filter.MessageId.Value));
                }
                else if (filter.ThemeId != null)
                {
                    predicate = predicate.AndAlso(f =>
                                                  f.Messages.Select(m => m.Message.ThemeId).Contains(filter.ThemeId.Value));
                }
            }

            int count;

            if (predicate != null)
            {
                query = query.Where(predicate);
                count = await Context.FileModels.CountAsync(predicate);
            }
            else
            {
                count = await Context.FileModels.CountAsync();
            }

            var list = listOptions.CreatePagedList <FileModel>(count);

            query = listOptions.TakeFrom(query);

            var files = await query.ToListAsync();

            list.AddRange(Mapper.Map <IEnumerable <File>, IEnumerable <FileModel> >(files));
            return(list);
        }
Exemplo n.º 4
0
        public async Task <PagedList <FileModel> > GetRepositoryFilesAsync(Guid repositoryId, ListOptions listOptions)
        {
            int count = await Context.RepositoryFiles.Distinct().CountAsync(m => m.RepositoryId == repositoryId);

            var result = listOptions.CreatePagedList <FileModel>(count);

            if (count == 0)
            {
                return(result);
            }

            IQueryable <File> files = Context.RepositoryFiles
                                      .Where(f => f.RepositoryId == repositoryId).Distinct()
                                      .Select(f => f.File)
                                      .OrderBy(f => f.UploadDate);

            files = listOptions.TakeFrom(files);

            var list = await files.ToListAsync();

            result.AddRange(Mapper.Map <IEnumerable <File>, IEnumerable <FileModel> >(list));
            return(result);
        }
Exemplo n.º 5
0
        public async Task <PagedList <GroupModel> > GetGroupsAsync(string searchString, ListOptions listOptions = null)
        {
            Expression <Func <Group, bool> > predicate = g => true;

            if (string.IsNullOrEmpty(searchString))
            {
                predicate.AndAlso(g => g.Name.ToLower().StartsWith(searchString.ToLower()));
            }

            var query = Context.Groups.OrderBy(g => g.Name).Where(predicate).AsQueryable();
            int count = await Context.Groups.CountAsync(predicate);

            var list = listOptions.CreatePagedList <GroupModel>(count);

            query = listOptions.TakeFrom(query);
            var groups = await query.Select(g => new GroupModel {
                Id = g.Id, Name = g.Name
            }).ToListAsync();

            list.AddRange(groups);

            return(list);
        }