예제 #1
0
        public PartialFindResult <UserForApiContract> GetList(
            string query                = "",
            UserGroupId groups          = UserGroupId.Nothing,
            DateTime?joinDateAfter      = null,
            DateTime?joinDateBefore     = null,
            NameMatchMode nameMatchMode = NameMatchMode.Auto,
            int start                 = 0,
            int maxResults            = 10,
            bool getTotalCount        = false,
            UserSortRule?sort         = null,
            bool includeDisabled      = false,
            bool onlyVerified         = false,
            string knowsLanguage      = null,
            UserOptionalFields fields = UserOptionalFields.None)
        {
            var queryParams = new UserQueryParams {
                Common              = new CommonSearchParams(SearchTextQuery.Create(query, nameMatchMode), false, false),
                Group               = groups,
                IncludeDisabled     = includeDisabled,
                OnlyVerifiedArtists = onlyVerified,
                KnowsLanguage       = knowsLanguage,
                JoinDateAfter       = joinDateAfter,
                JoinDateBefore      = joinDateBefore,
                Sort   = sort ?? UserSortRule.Name,
                Paging = new PagingProperties(start, maxResults, getTotalCount)
            };

            return(queries.GetUsers(queryParams, user => new UserForApiContract(user, userIconFactory, fields)));
        }
예제 #2
0
        public ActionResult Index(string filter = null, UserGroupId?groupId = null)
        {
            var vm = new Models.User.Index {
                Filter = filter, GroupId = groupId
            };

            if (!string.IsNullOrEmpty(filter))
            {
                var queryParams = new UserQueryParams
                {
                    Common = new CommonSearchParams(SearchTextQuery.Create(filter), false, false),
                    Paging = new PagingProperties(0, 1, true),
                    Group  = groupId ?? UserGroupId.Nothing
                };

                var result = Data.GetUsers(queryParams, u => u.Name);

                if (result.TotalCount == 1 && result.Items.Length == 1)
                {
                    return(RedirectToAction("Profile", new { id = result.Items[0] }));
                }
            }

            return(View(vm));
        }
예제 #3
0
        public async Task <QueryResult <UserForList> > GetUsers(UserQueryParams queryParams)
        {
            var queryResult = new QueryResult <UserForList>();

            var query = this.context.User
                        .Select(x => new UserForList
            {
                Id         = x.Id,
                FirstName  = x.FirstName,
                LastName   = x.LastName,
                Email      = x.Email,
                LastActive = x.LastActive,
                Roles      = x.UserRoles.Where(c => c.UserId == x.Id).Select(o => o.Role.Name).ToList()
            })
                        .AsQueryable();


            var columMap = new Dictionary <string, Expression <Func <UserForList, object> > >()
            {
                ["roles"]      = v => v.Roles.Count(),
                ["lastActive"] = v => v.LastActive,
            };

            query = query.ApplyOrdering <UserForList>(queryParams, columMap);

            queryResult.TotalItems = await query.CountAsync();

            queryResult.Items = query.ApplyPaging(queryParams);

            return(queryResult);
        }
예제 #4
0
        public async Task <IEnumerable <User> > GetUsers(UserQueryParams userParams)
        {
            var users = _context.Users
                        .Where(i => i.Id != userParams.UserId)
                        .Include(i => i.Images)
                        .AsQueryable();

            if (userParams.Followers)
            {
                // takip edenler
                var result = await GetFollows(userParams.UserId, false);

                users = users.Where(u => result.Contains(u.Id));
            }

            if (userParams.Followings)
            {
                // takip edilenler
                var result = await GetFollows(userParams.UserId, true);

                users = users.Where(u => result.Contains(u.Id));
            }

            return(await users.ToListAsync());
        }
예제 #5
0
        public async Task <IActionResult> GetUsers([FromQuery] UserQueryParams queryParams)
        {
            var user = await this.repo.GetUsers(queryParams);

            var userToReturn = this.mapper.Map <QueryResultResource <UserForList> >(user);

            return(Ok(userToReturn));
        }
예제 #6
0
        public static IEnumerable <User> ApplyQuery(this IEnumerable <User> query, UserQueryParams queryParams, bool usePaging = true)
        {
            if (queryParams.Id.HasValue)
            {
                query = query.Where(x => x.Id == queryParams.Id.Value);
            }

            return(query.ApplyBaseQuery(queryParams));
        }
        // api/users?followers=true&gender=male
        public async Task <IActionResult> GetUsers([FromQuery] UserQueryParams userParams)
        {
            userParams.UserId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value);
            var users = await _repository.GetUsers(userParams);

            var result = _mapper.Map <IEnumerable <UserForListDTO> >(users);

            return(Ok(result));
        }
예제 #8
0
        public UserContract GetUserInfo(string name)
        {
            var queryParams = new UserQueryParams {
                Common = new CommonSearchParams(SearchTextQuery.Create(name, NameMatchMode.Exact), false, false),
                Paging = new PagingProperties(0, 1, false)
            };

            var users = userQueries.GetUsers(queryParams, u => new UserContract(u));

            return(users.Items.FirstOrDefault());
        }
예제 #9
0
        private PartialFindResult <UserContract> CallGetUsers(UserGroupId groupId = UserGroupId.Nothing, string name = null, bool disabled = false, bool verifiedArtists = false, UserSortRule sortRule = UserSortRule.Name, PagingProperties paging = null)
        {
            var queryParams = new UserQueryParams {
                Common              = new CommonSearchParams(SearchTextQuery.Create(name), false, false),
                Group               = groupId,
                IncludeDisabled     = disabled,
                OnlyVerifiedArtists = verifiedArtists,
                Sort   = sortRule,
                Paging = paging ?? new PagingProperties(0, 10, true)
            };

            return(data.GetUsers(queryParams, u => new UserContract(u)));
        }
예제 #10
0
        public UserWithFilterForCaountSpecification(UserQueryParams queryParams)
            : base(x =>
                   (string.IsNullOrEmpty(queryParams.Search) ||
                    x.FirstName.ToLower().Contains(queryParams.Search) ||
                    x.LastName.ToLower().Contains(queryParams.Search) ||
                    x.Department.Name.ToLower().Contains(queryParams.Search) ||
                    x.Campus.Name.ToLower().Contains(queryParams.Search)

                   ) &&
                   (!queryParams.Status.HasValue || x.IsActive == queryParams.Status)
                   )
        {
        }
        public async Task <IEnumerable <User> > GetUsers(UserQueryParams userParams)
        {
            var users = _context.Users
                        .Where(i => i.Id != userParams.UserId)
                        .Include(i => i.Images)
                        .AsQueryable();

            if (userParams.Followers)
            {
                // takip edenler
                var result = await GetFollows(userParams.UserId, false);

                users = users.Where(u => result.Contains(u.Id));
            }

            if (userParams.Followings)
            {
                // takip edilenler
                var result = await GetFollows(userParams.UserId, true);

                users = users.Where(u => result.Contains(u.Id));
            }

            if (!string.IsNullOrEmpty(userParams.Gender))
            {
                users = users.Where(i => i.Gender == userParams.Gender);
            }

            if (userParams.minAge != 18 || userParams.maxAge != 100)
            {
                var today = DateTime.Now;
                var min   = today.AddYears(-(userParams.maxAge + 1));
                var max   = today.AddYears(-userParams.minAge);

                users = users.Where(i => i.DateOfBirth >= min && i.DateOfBirth <= max);
            }

            if (!string.IsNullOrEmpty(userParams.City))
            {
                users = users.Where(i => i.City.ToLower() == userParams.City.ToLower());
            }

            if (!string.IsNullOrEmpty(userParams.Country))
            {
                users = users.Where(i => i.Country.ToLower() == userParams.Country.ToLower());
            }

            return(await users.ToListAsync());
        }
        public UserWithTitleAndCampusSpesification(UserQueryParams queryParams)
            : base(x =>
                   (string.IsNullOrEmpty(queryParams.Search) ||
                    x.FirstName.ToLower().Contains(queryParams.Search) ||
                    x.LastName.ToLower().Contains(queryParams.Search) ||
                    x.Department.Name.ToLower().Contains(queryParams.Search) ||
                    x.Campus.Name.ToLower().Contains(queryParams.Search)

                   ) &&
                   (string.IsNullOrEmpty(queryParams.StatusPassive) || x.IsActive == false) &&
                   (string.IsNullOrEmpty(queryParams.StatusActive) || x.IsActive == true)
                   )
        {
            AddInclude(x => x.Campus);
            AddInclude(x => x.Department);
            AddInclude(x => x.Degree);
            AddInclude(x => x.UserPhotos);
            AddOrderBy(x => x.FirstName);
            ApplyPaging(queryParams.PageSize * (queryParams.PageIndex - 1), queryParams.PageSize);
        }
예제 #13
0
        public async Task <IActionResult> GetUsers([FromQuery] UserQueryParams userQueryParams)
        {
            var currentUserId = User.GetId();

            userQueryParams.CurrentUserId = currentUserId;

            if (string.IsNullOrWhiteSpace(userQueryParams.Gender))
            {
                var currentUser = await _repo.GetUser(currentUserId);

                userQueryParams.Gender = currentUser.Gender.Equals("male", StringComparison.InvariantCultureIgnoreCase)
                    ? "female"
                    : "male";
            }

            var users = await _repo.GetUsers(userQueryParams);

            var usersDtos = _mapper.Map <IEnumerable <UserForListDto> >(users);

            Response.AddPagination(users.CurrentPage, users.PageSize, users.TotalCount, users.TotalPages);

            return(Ok(usersDtos));
        }
예제 #14
0
        public async Task <PagedList <User> > GetUsers(UserQueryParams userQueryParams)
        {
            var results = _context.Users.Include(u => u.Photos).Where(u => u.Id != userQueryParams.CurrentUserId && u.Gender == userQueryParams.Gender);

            var minDateOfBirth = DateTime.Today.AddYears(-userQueryParams.MaxAge - 1);
            var maxDateOfBirth = DateTime.Today.AddYears(-userQueryParams.MinAge);

            results = results.Where(u => u.DateOfBirth >= minDateOfBirth && u.DateOfBirth <= maxDateOfBirth);

            if (!string.IsNullOrWhiteSpace(userQueryParams.OrderBy))
            {
                results = results.OrderByDescending(u =>
                                                    userQueryParams.OrderBy.Equals("created", StringComparison.InvariantCultureIgnoreCase)
                        ? u.Created
                        : u.LastActive);
            }
            else
            {
                results = results.OrderByDescending(u => u.LastActive);
            }

            return(await PagedList <User> .CreateAsync(results, userQueryParams.PageNumber, userQueryParams.PageSize));
        }
예제 #15
0
        public async Task <Pagination <UserForListDto> > GetUserForList(UserQueryParams userQueryParams)
        {
            var spec  = new UserWithTitleAndCampusSpesification(userQueryParams);
            var users = await userDal.ListEntityWithSpecAsync(spec);

            var countSpec  = new UserWithFilterForCaountSpecification(userQueryParams);
            var totalItems = await userDal.CountAsync(countSpec);

            if (users == null)
            {
                throw new RestException(HttpStatusCode.BadRequest, new { UsersNotFound = Messages.UserNotFound });
            }

            var data = mapper.Map <List <User>, List <UserForListDto> >(users);

            return(new Pagination <UserForListDto>
                   (
                       userQueryParams.PageIndex,
                       userQueryParams.PageSize,
                       totalItems,
                       data

                   ));
        }
예제 #16
0
        public IHttpActionResult SearchUsers([FromUri] UserQueryParams obj, int page, int size)
        {
            try
            {
                if (obj == null)
                {
                    return(BadRequest());
                }

                var usersTuple = userService.SearchUsers(obj.FirstName, obj.LastName, obj.City,
                                                         obj.BirthdayFrom, obj.BirthdayTo, obj.Gender, obj.RoleName, page, size);
                var users = usersTuple.Item1.ToList();

                var retVal = AutoMapper.Mapper.Map <List <ApplicationUser>, List <UserViewModel> >(users);


                retVal.ForEach(
                    retValObj =>
                {
                    retValObj.RoleName = userService.GetRoleName(retValObj.Id);
                });
                PageModel <UserViewModel> pageModel = new PageModel <UserViewModel>()
                {
                    Models = retVal
                };
                pageModel.CurrentPage = page;
                pageModel.Count       = usersTuple.Item2;
                pageModel.Size        = size;

                return(Ok(pageModel));
            }
            catch (Exception)
            {
                return(BadRequest());
            }
        }
예제 #17
0
 public async Task <ActionResult <Pagination <UserForListDto> > > GetUserList([FromQuery] UserQueryParams userQueryParams)
 {
     return(await userService.GetUserForList(userQueryParams));
 }
예제 #18
0
 public IQueryable <User> FindUser(UserQueryParams queryParams)
 {
     return(null);
 }