public OperationResult <PaginationList <Author> > GetAuthors(AuthorsQueryParamters queryParamters) { bool hasOrderBy = queryParamters.OrderBy != null; bool hasSearchQuery = queryParamters.SearchQuery != null; try { using (CourseLibraryContext context = new CourseLibraryContext(options)) { var collection = context.Authors as IQueryable <Author>; if (hasSearchQuery) { collection = collection.Where(a => a.FirstName.Contains(queryParamters.SearchQuery) || a.LastName.Contains(queryParamters.SearchQuery) || a.MainCategory.Contains(queryParamters.SearchQuery)); } if (hasOrderBy) { string orderstring = filterationService.GetFiltrationString <AuthorDto, Author>(queryParamters.OrderBy); collection = collection.OrderBy(orderstring); } logger.Info($"Request authors with query paramters : {queryParamters}"); //TODO add pagination here PaginationList <Author> result = PaginationList <Author> .CreatePagination(collection, queryParamters.PageSize, queryParamters.PageNumber); return(new SuccessOperationResult <PaginationList <Author> > { Result = result, Code = ConstOperationCodes.SUCCESS_OPERATION }); } } catch (Exception e) { logger.Error($"Error in Course library Service GetAuthors : {e}"); return(new FailedOperationResult <PaginationList <Author> > { Code = ConstOperationCodes.FAILED_OPERATION }); } }
public ActionResult <IEnumerable <AuthorDto> > GetAuthors([FromQuery] AuthorsQueryParamters queryParamters) { try { OperationResult <PaginationList <Author> > result = courseLibraryService.GetAuthors(queryParamters); if (result.Success) { var successOperation = result as SuccessOperationResult <PaginationList <Author> >; IEnumerable <AuthorDto> mappingResult = mapper.Map <IEnumerable <AuthorDto> >(successOperation.Result.ListData); var paginationMetaData = new { totalCount = successOperation.Result.TotalCount, totalPages = successOperation.Result.TotalPages, currentPage = successOperation.Result.CurrentPage, pageSize = successOperation.Result.PageSize }; Response.Headers.Add("paginationMetaData", JsonConvert.SerializeObject(paginationMetaData)); var operationReturn = new SuccessOperationResult <IEnumerable <AuthorDto> > { Result = mappingResult, Code = successOperation.Code, }; return(Ok(operationReturn)); } else { var failedOperation = result as FailedOperationResult <PaginationList <Author> >; return(Ok(failedOperation)); } } catch (Exception ex) { loggerService.Error($"Error in Authors Controller GetAuthors {ex}"); return(StatusCode(StatusCodes.Status500InternalServerError)); } }