private string CreateUserResourceUri(UsersParams usersParam, UriTypeEnum uriType)
        {
            switch (uriType)
            {
            case UriTypeEnum.PreviousPage:
                return(Url.Link("GetUsers",
                                new
                {
                    pageNumber = usersParam.PageNumber - 1,
                    pageSize = usersParam.PageSize
                }));

            case UriTypeEnum.NextPage:
                return(Url.Link("GetUsers",
                                new
                {
                    pageNumber = usersParam.PageNumber + 1,
                    pageSize = usersParam.PageSize
                }));

            case UriTypeEnum.Current:
            default:
                return(Url.Link("GetUsers",
                                new
                {
                    pageNumber = usersParam.PageNumber,
                    pageSize = usersParam.PageSize
                }));
            }
        }
        private IEnumerable <LinkDto> CreateUsersLinks(UsersParams usersParams, bool hasPrevious, bool hasNext)
        {
            var links = new List <LinkDto>();

            links.Add(
                new LinkDto(CreateUserResourceUri(usersParams, UriTypeEnum.Current),
                            "self",
                            "GET"));

            if (hasNext)
            {
                links.Add(
                    new LinkDto(CreateUserResourceUri(usersParams, UriTypeEnum.NextPage),
                                "nextPage",
                                "GET")
                    );
            }

            if (hasPrevious)
            {
                links.Add(
                    new LinkDto(CreateUserResourceUri(usersParams, UriTypeEnum.PreviousPage),
                                "previousPage",
                                "GET")
                    );
            }


            return(links);
        }
示例#3
0
        public async Task <IActionResult> GetUsers([FromQuery] UsersParams usersParams)
        {
            var currentUserId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value);
            var userFromRepo  = await _repo.GetOtherUser(currentUserId);

            usersParams.UserId = currentUserId;
            if (string.IsNullOrEmpty(usersParams.Gender))
            {
                if (userFromRepo.Gender == "male")
                {
                    usersParams.Gender = "female";
                }

                if (userFromRepo.Gender == "female")
                {
                    usersParams.Gender = "male";
                }

                if (userFromRepo.Gender == "other")
                {
                    usersParams.Gender = "other";
                }
            }

            var users = await _repo.GetUsers(usersParams);

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

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

            return(Ok(usersToReturn));
        }
        public async Task <PagedList <User> > GetUsers(UsersParams usersParams)
        {
            var users = _context.Users.Include(p => p.Photos).OrderByDescending(u => u.LastActive).AsQueryable();

            users = users.Where(u => u.Id != usersParams.UserId);
            users = users.Where(u => u.Gender == usersParams.Gender);
            if (usersParams.MinAge != 18 || usersParams.MaxAge != 99)
            {
                var minDob = DateTime.Today.AddYears(-usersParams.MaxAge - 1);
                var maxDob = DateTime.Today.AddYears(-usersParams.MinAge);

                users = users.Where(u => u.DateOfBirth >= minDob && u.DateOfBirth <= maxDob);
            }
            if (!string.IsNullOrEmpty(usersParams.OrderBy))
            {
                switch (usersParams.OrderBy)
                {
                case "created":
                    users = users.OrderByDescending(u => u.Created);
                    break;

                default:
                    users = users.OrderByDescending(u => u.LastActive);
                    break;
                }
            }
            return(await PagedList <User> .CreateAsync(users, usersParams.PageNumber, usersParams.PageSize));
        }
示例#5
0
        public async Task <PagedList <User> > GetUsersAsync(UsersParams usersParams)
        {
            var collection = await _userRepository.GetUsersAsync();

            var pagedList = PagedList <User> .Create(collection, usersParams.PageNumber, usersParams.PageSize);

            return(pagedList);
        }
        public async Task <IActionResult> GetUsersAsync([FromQuery] UsersParams usersParams, [FromHeader(Name = "Accept")] string mediaType)
        {
            if (!MediaTypeHeaderValue.TryParse(mediaType, out MediaTypeHeaderValue parsedMediaType))
            {
                return(BadRequest());
            }

            PagedList <User> users = await _userService.GetUsersAsync(usersParams);

            if (users == null)
            {
                return(NotFound());
            }

            var previousPageLink = users.HasPrevious ? CreateUserResourceUri(usersParams, UriTypeEnum.PreviousPage) : null;
            var nextPageLink     = users.HasNext ? CreateUserResourceUri(usersParams, UriTypeEnum.NextPage) : null;

            var paginationMetaData = new
            {
                totalCount  = users.TotalCount,
                pageSize    = users.PageSize,
                currentPage = users.CurrentPage,
                totalPages  = users.TotalPages,
                previousPageLink,
                nextPageLink
            };

            var paginationMetaDataJson = JsonSerializer.Serialize(paginationMetaData);

            Response.Headers.Add("X-Pagination", paginationMetaDataJson);

            var includeLinks = parsedMediaType.SubTypeWithoutSuffix.EndsWith("hateoas", StringComparison.InvariantCultureIgnoreCase);

            if (includeLinks)
            {
                var usersWithLinks = new List <ResponseUserLinksDto>();

                foreach (var item in users)
                {
                    IEnumerable <LinkDto> links = new List <LinkDto>();
                    links = CreateUserLinks(item.Id);
                    var userWithLinks = _mapper.Map <ResponseUserLinksDto>(item);
                    userWithLinks.Links = links;

                    usersWithLinks.Add(userWithLinks);
                }

                var envelopeWithLinks = new EnvelopeResponseUserLinksDto();
                envelopeWithLinks.Value = usersWithLinks;
                envelopeWithLinks.Links = CreateUsersLinks(usersParams, users.HasPrevious, users.HasNext);

                return(Ok(envelopeWithLinks));
            }

            var responseDtos = _mapper.Map <IEnumerable <ResponseUserDto> >(users);

            return(Ok(responseDtos));
        }
示例#7
0
        public async Task <PagedList <User> > GetUsers(UsersParams usersParams)
        {
            var users = _context.Users.Include(p => p.Photos).OrderByDescending(u => u.LastActive).AsQueryable();

            //For Excluding the current user who has logged in
            users = users.Where(u => u.Id != usersParams.UserId);

            // For only a particular Gender (Means what we have decided from the controller)
            users = users.Where(users => users.Gender == usersParams.Gender);

            // Added the filters for Like User Ids

            if (usersParams.Likers)
            {
                var userLikers = await GetUserLikes(usersParams.UserId, usersParams.Likers);

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

            if (usersParams.Likees)
            {
                var userLikees = await GetUserLikes(usersParams.UserId, usersParams.Likers);

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

            if (usersParams.MinAge != 18 || usersParams.MaxAge != 99)
            {
                // minDOB--- min DOB user is looking for
                // maxDob -- Max Dob , user is looking for

                var minDob = DateTime.Today.AddYears(-usersParams.MaxAge - 1);
                var maxDob = DateTime.Today.AddYears(-usersParams.MinAge);
                users = users.Where(user => user.DateOfBirth >= minDob && user.DateOfBirth <= maxDob);
            }

            if (!string.IsNullOrEmpty(usersParams.OrderBy))
            {
                switch (usersParams.OrderBy)
                {
                case "created":
                    users = users.OrderByDescending(u => u.CreatedAt);
                    break;

                default:
                    users = users.OrderByDescending(u => u.LastActive);
                    break;
                }
            }


            return(await PagedList <User> .CreateAsync(users, usersParams.PageNumber, usersParams.PageSize));
        }
示例#8
0
        public async Task <ActionResult <IEnumerable <MemberDto> > > GetUsers([FromQuery] UsersParams usersParams)
        {
            var user = await _userRepository.GetUserByUsernameAsync(User.GetUsername());

            usersParams.CurrentUsername = user.UserName;
            if (string.IsNullOrEmpty(usersParams.Gender))
            {
                usersParams.Gender = user.Gender == "male" ? "female" : "male";
            }

            var users = await _userRepository.GetMembersAsync(usersParams);

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

            return(Ok(users));
        }
示例#9
0
        public async Task <PagedList <MemberDto> > GetMembersAsync(UsersParams usersParams)
        {
            //return await _context.Users.ProjectTo<MemberDto>(_mapper.ConfigurationProvider).ToListAsync();
            var query = _context.Users.AsNoTracking().AsQueryable();

            query = query.Where(u => u.UserName != usersParams.CurrentUsername);
            query = query.Where(u => u.Gender == usersParams.Gender);

            var minDob = DateTime.Today.AddYears(-usersParams.MaxAge);
            var maxDob = DateTime.Today.AddYears(-usersParams.MinAge);

            query = query.Where(u => u.DateOfBirth.Year >= minDob.Year && u.DateOfBirth.Year <= maxDob.Year);

            query = usersParams.OrderBy switch
            {
                "created" => query.OrderByDescending(u => u.Created),
                _ => query.OrderByDescending(u => u.LastActive),
            };

            return(await PagedList <MemberDto> .CreateAsync(
                       query.ProjectTo <MemberDto>(_mapper.ConfigurationProvider), usersParams.PageNumber, usersParams.PageSize));
        }
示例#10
0
        public async Task <PagedList <MemberDTO> > GetMembersAsync(UsersParams usersParams)
        {
            // add default gender, remove current user, add opposite gender for current user
            // filter by age range also
            var query = _context.Users.AsQueryable();

            query = query.Where(u => u.UserName != usersParams.CurrentUserName);
            query = query.Where(u => u.Gender == usersParams.Gender);

            var minDob = DateTime.Today.AddYears(-usersParams.MaxAge - 1);
            var maxDob = DateTime.Today.Date.AddYears(-usersParams.MinAge);

            query = query.Where(u => u.DateOfBirth >= minDob && u.DateOfBirth <= maxDob);

            query = usersParams.OrderBy switch
            {
                "created" => query.OrderByDescending(u => u.Created),
                _ => query.OrderByDescending(u => u.LastActive)
            };

            return(await PagedList <MemberDTO> .CreateAsync(
                       query.ProjectTo <MemberDTO>(_mapper.ConfigurationProvider).AsNoTracking(),
                       usersParams.PageNumber, usersParams.PageSize));
        }