Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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));
        }