Example #1
0
        //this methods helps to create a Url link to previous Resource
        private string CreateAuthorsResourceUris(AuhtorResourceParameters auhtorResourceParameters, ResourceUriType type)
        {
            switch (type)
            {
            case ResourceUriType.PreviousPage:
                return(Url.Link("GetAuthors",
                                new
                {
                    PageNumber = auhtorResourceParameters.PageNumber - 1,
                    PageSize = auhtorResourceParameters.pageSize,
                    MainCategory = auhtorResourceParameters.mainCategory,
                    SearchQuery = auhtorResourceParameters.searchQuery
                }));

            case ResourceUriType.NextPage:
                return(Url.Link("GetAuthors",
                                new
                {
                    PageNumber = auhtorResourceParameters.PageNumber + 1,
                    PageSize = auhtorResourceParameters.pageSize,
                    MainCategory = auhtorResourceParameters.mainCategory,
                    SearchQuery = auhtorResourceParameters.searchQuery
                }));

            default:
                return(Url.Link("GetAuthors",
                                new
                {
                    PageNumber = auhtorResourceParameters.PageNumber,
                    PageSize = auhtorResourceParameters.pageSize,
                    MainCategory = auhtorResourceParameters.mainCategory,
                    SearchQuery = auhtorResourceParameters.searchQuery
                }));
            }
        }
Example #2
0
        //get Auhtors wth mainCategory for filtering purpose and searching
        public PagedList<Author> GetAuthors(AuhtorResourceParameters auhtorResourceParameters)
        {
            //throw new ArgumentNullException();

            //if (string.IsNullOrWhiteSpace(auhtorResourceParameters.mainCategory) && string.IsNullOrWhiteSpace(auhtorResourceParameters.searchQuery))
            //{
            //    return GetAuthors();
            //}

            var collections = _context.Authors as IQueryable<Author>;

            if (!string.IsNullOrWhiteSpace(auhtorResourceParameters.mainCategory))
            {
                auhtorResourceParameters.mainCategory = auhtorResourceParameters.mainCategory.Trim();

                collections = collections.Where(m => m.MainCategory == auhtorResourceParameters.mainCategory);
              //  return collections;
            }

            //implemenent searching 
            if (!string.IsNullOrWhiteSpace(auhtorResourceParameters.searchQuery))
            {
                auhtorResourceParameters.searchQuery = auhtorResourceParameters.searchQuery.Trim();

                collections = collections.Where(m => m.MainCategory.Contains(auhtorResourceParameters.searchQuery)
                || m.FirstName.Contains(auhtorResourceParameters.searchQuery)
                || m.LastName.Contains(auhtorResourceParameters.searchQuery));
               
            }

            //apply the paging here before TOList is called

            return PagedList<Author>.Create(collections, auhtorResourceParameters.PageNumber, auhtorResourceParameters.pageSize);
               //return collections
               // .Skip(auhtorResourceParameters.pageSize * (auhtorResourceParameters.PageNumber - 1)) // ths 
               // .Take(auhtorResourceParameters.pageSize)
               // .ToList();
        }
Example #3
0
        public ActionResult <IEnumerable <AuhtorDTO> > GetAuthors([FromQuery] AuhtorResourceParameters auhtorResourceParameters)
        {
            try
            {
                var GetAllAuthors = _courseLibrary.GetAuthors(auhtorResourceParameters);

                //checking if there is a previous link, if there is calle dthe method, if not set to null
                var previousPageLink = GetAllAuthors.HasPrevious ? CreateAuthorsResourceUris(auhtorResourceParameters, ResourceUriType.PreviousPage) : null;

                var nextPageLink = GetAllAuthors.HasNext ? CreateAuthorsResourceUris(auhtorResourceParameters, ResourceUriType.NextPage) : null;

                //then we create the MetaData we want to return to the user for guide

                var paginationMetaData = new
                {
                    totalCount  = GetAllAuthors.Totalcount,
                    pageSize    = GetAllAuthors.PageSize,
                    currentPage = GetAllAuthors.CurrentPage,
                    previousPageLink,
                    nextPageLink
                };

                //Adding to the header
                Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetaData));


                //using Automapper for cleaner code instead of select Query,(seee below)
                //the return type first(destination), then the source
                var auhtors = _mapper.Map <IEnumerable <AuhtorDTO> >(GetAllAuthors);

                //var auhtors = GetAllAuthors
                //    .Select(a => new AuhtorDTO
                //    {
                //        ID = a.ID,
                //        Name =$"{a.FirstName} {a.LastName}",
                //        //An extention method written to grab the Authors age
                //        Age = DateTimeOffSetExtensions.GetCurrentAge(a.DateOfBirth),
                //        MainCategory = a.MainCategory,
                //        Courses = a.Courses,
                //    });


                // return body format for the Api with right statusCode
                return(Ok(new JsonResponse <AuhtorDTO>()
                {
                    Success = true,
                    Results = auhtors
                }));
            }

            catch (Exception ex)
            {
                //log ex
                var path         = HttpContext.Request.Path;
                var query        = HttpContext.Request.QueryString;
                var pathAndQuery = path + query;
                var messg        = _courseLibrary.LogErrorMessage(ex.Message, pathAndQuery);
                return(Ok(new JsonResponse <string>()
                {
                    Success = false,
                    ErrorMessage = "Sorry, something just went wrong while processing your request! Pls Try Again."
                }));


                //return StatusCode(500, messg);
            }

            // return Ok(GetAllAuthors);
        }