예제 #1
0
        private IQueryable <QuoteModel> generateListQueriable(ListQuoteRequestModel request, IQueryable <QuoteModel> orderedQuery)
        {
            var queryUnordered = _context.Quote.Include(q => q.User).Include(q => q.Snitch)
                                 .AsNoTracking();

            orderedQuery = orderQuotes(request, orderedQuery, queryUnordered);

            return(orderedQuery);
        }
예제 #2
0
        public async Task <ListQuoteResponseModel> GetList(ListQuoteRequestModel request)
        {
            try
            {
                ListQuoteResponseModel response = await getListResponse(request);

                return(response);
            }
            catch (System.Exception)
            {
                throw;
            }
        }
예제 #3
0
        public async Task <ListQuoteResponseModel> GetListByUserAsync(ListQuoteRequestModel request, string userId)
        {
            try
            {
                ListQuoteResponseModel response = await getListResponseByUser(request, userId);

                return(response);
            }
            catch (System.Exception)
            {
                throw;
            }
        }
예제 #4
0
        private async Task <ListQuoteResponseModel> getListResponseBySnitch(ListQuoteRequestModel request, string snitchId)
        {
            IQueryable <QuoteModel> orderedQuery = null;
            var quotesCount = await countQuotesbySnitch(snitchId);

            var numberOfPages = quotesCount / request.N;

            orderedQuery = generateListQueriableBySnitch(request, orderedQuery, snitchId);

            ListQuoteResponseModel response = await getListResponse(request, orderedQuery, quotesCount, numberOfPages);

            return(response);
        }
예제 #5
0
        public async Task <IActionResult> List([FromBody] ListQuoteRequestModel request)
        {
            try
            {
                var response = await _quotesRepository.GetListAsync(request);

                return(Ok(response));
            }
            catch (Exception e)
            {
                _logger.LogError($"Não foi possivel listar quotes: {e}");
                return(BadRequest());
            }
        }
예제 #6
0
        private static async Task <ListQuoteResponseModel> getListResponse(ListQuoteRequestModel request, IQueryable <QuoteModel> orderedQuery, int quotesCount, int numberOfPages)
        {
            var toReturnList = (await orderedQuery?.Skip(request.N * request.Page)
                                .Take(request.N)?.ToListAsync()).ConvertAll(
                q => q.ToFullViewMode()
                );

            var response = new ListQuoteResponseModel()
            {
                NumberOfPages = numberOfPages,
                PageNumber    = request.Page,
                Quotes        = toReturnList,
                TotalQuotes   = quotesCount
            };

            return(response);
        }
예제 #7
0
        private async Task <ListQuoteResponseModel> getListResponse(ListQuoteRequestModel request)
        {
            IQueryable <QuoteModel> orderedQuery = null;
            var quotesCount = await countQuotes();

            var numberOfPages = quotesCount / request.N;

            var queryUnordered = _context.Quote.AsNoTracking();

            switch (request.OrderBy)
            {
            case OrderByEnum.ByDate:
                orderedQuery = queryUnordered.OrderByDescending(q => q.Date);
                break;

            case OrderByEnum.ByName:
                orderedQuery = queryUnordered.OrderByDescending(q => q.User.Name);
                break;

            case OrderByEnum.ByPositiveVotes:
                orderedQuery = queryUnordered.OrderByDescending(q => q.Upvotes);
                break;

            case OrderByEnum.ByNegativeVotes:
                orderedQuery = queryUnordered.OrderByDescending(q => q.Downvotes);
                break;
            }

            var toReturnList = await orderedQuery?.Skip(request.N *request.Page)
                               .Take(request.N)?.ToListAsync();

            var response = new ListQuoteResponseModel()
            {
                NumberOfPages = numberOfPages,
                PageNumber    = request.Page,
                quotes        = toReturnList,
                TotalQuotes   = quotesCount
            };

            return(response);
        }
예제 #8
0
        private static IQueryable <QuoteModel> orderQuotes(ListQuoteRequestModel request, IQueryable <QuoteModel> orderedQuery, IQueryable <QuoteModel> queryUnordered)
        {
            switch (request.OrderBy)
            {
            case OrderByEnum.ByDate:
                orderedQuery = queryUnordered.OrderByDescending(q => q.Date);
                break;

            case OrderByEnum.ByName:
                orderedQuery = queryUnordered.OrderByDescending(q => q.User.Name);
                break;

            case OrderByEnum.ByPositiveVotes:
                orderedQuery = queryUnordered.OrderByDescending(q => q.Upvotes);
                break;

            case OrderByEnum.ByNegativeVotes:
                orderedQuery = queryUnordered.OrderByDescending(q => q.Downvotes);
                break;
            }

            return(orderedQuery);
        }
예제 #9
0
 public Task <ListQuoteResponseModel> GetListAsync(ListQuoteRequestModel request)
 {
     throw new System.NotImplementedException();
 }