public async Task <PagingResponse <NoticeModel> > GetItems(NoticeParameters noteParameters) { var queryStringParam = new Dictionary <string, string> { ["pageNumber"] = noteParameters.PageNumber.ToString(), ["searchTerm"] = noteParameters.SearchTerm == null ? "" : noteParameters.SearchTerm, ["orderBy"] = noteParameters.OrderBy }; var response = await _client.GetAsync(QueryHelpers.AddQueryString("/api/notices", queryStringParam)); var content = await response.Content.ReadAsStringAsync(); if (!response.IsSuccessStatusCode) { throw new ApplicationException(content); } var pagingResponse = new PagingResponse <NoticeModel> { Items = JsonSerializer.Deserialize <List <NoticeModel> >(content, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }), MetaData = JsonSerializer.Deserialize <MetaData>(response.Headers.GetValues("X-Pagination").First(), new JsonSerializerOptions { PropertyNameCaseInsensitive = true }) }; return(pagingResponse); }
public async Task <IActionResult> Get([FromQuery] NoticeParameters parameters) { if (parameters == null) { return(BadRequest()); } //핀기능이있을 경우 먼저 핀 true 목록 제거 var removePinnedItems = await _context.Notice.Where(m => !m.IsPinned) .Search(parameters.SearchTerm) .Sort(parameters.OrderBy) .ToListAsync(); //Pinned true 최상단으로 추가 var pinnedItem = await _context.Notice.Where(m => m.IsPinned).OrderByDescending(x => x.Created).ToListAsync(); pinnedItem.AddRange(removePinnedItems); //Pinned true 최상단으로 추가 var pageItems = PagedList <NoticeModel> .ToPagedList(pinnedItem, parameters.PageNumber, parameters.PageSize); Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(pageItems.MetaData)); return(Ok(pageItems)); }