Exemplo n.º 1
0
        public async Task <IQueryable <Expense> > GetUserExpenses(Guid userId,
                                                                  ExpensesResourceParameters expensesResourceParameters)
        {
            if (expensesResourceParameters == null)
            {
                throw new ArgumentNullException(nameof(ExpensesResourceParameters));
            }

            var collection = _context.Expenses as IQueryable <Expense>;

            collection = collection.Where(s => s.UserId == userId);

            if (!string.IsNullOrWhiteSpace(expensesResourceParameters.SearchQuery))
            {
                var searchQuery = expensesResourceParameters.SearchQuery.Trim();
                collection = collection.Where(s => s.Title.Contains(searchQuery) ||
                                              s.Category.Contains(searchQuery));
            }

            if (!string.IsNullOrWhiteSpace(expensesResourceParameters.OrderBy))
            {
                collection = collection.ApplySort(expensesResourceParameters.OrderBy);
            }

            return(await Task.Run(() => collection));
        }
Exemplo n.º 2
0
        public async Task <ActionResult <PagedList <Expense> > > GetUserExpenses(string userName,
                                                                                 [FromQuery] ExpensesResourceParameters expensesResourceParameters)
        {
            var    userIdFromToken = User.GetUserIdAsGuid();
            string currentUserName = User.GetUserName();

            if (currentUserName != userName)
            {
                return(Unauthorized());
            }

            var expensesFromRepo = await _expenseService.GetUserExpenses(userIdFromToken, expensesResourceParameters);

            var paginationMetaData = new
            {
                totalCount  = expensesFromRepo.TotalCount,
                pageSize    = expensesFromRepo.PageSize,
                currentPage = expensesFromRepo.CurrentPage,
                totalPages  = expensesFromRepo.TotalPages
            };

            Response.Headers.Add("X-Pagination",
                                 JsonSerializer.Serialize(paginationMetaData));

            var expenses = _mapper.Map <IEnumerable <ExpenseDto> >(expensesFromRepo);

            return(Ok(expenses));
        }
Exemplo n.º 3
0
        public async Task <IEnumerable> GetUserExpenseStatsByProperty(
            Guid userId,
            DateTimeOffset startDate,
            DateTimeOffset endDate,
            ExpenseGroupByProperty groupByProperty)
        {
            var expensesResourceParameters = new ExpensesResourceParameters();

            var expensesCollection = await _expenseRepository
                                     .GetUserExpenses(userId, expensesResourceParameters);

            switch (groupByProperty)
            {
            case ExpenseGroupByProperty.ExpenseDate:
                var queryByExpenseDate = expensesCollection
                                         .Where(s => s.ExpenseDate >= startDate && s.ExpenseDate <= endDate)
                                         .OrderBy(o => o.ExpenseDate)
                                         .GroupBy(
                    exp => exp.ExpenseDate,
                    exp => exp.Cost,
                    (date, costs) => new
                {
                    Day   = date.ToString("d"),
                    Costs = costs.Sum()
                });

                return(await queryByExpenseDate.ToListAsync());

            case ExpenseGroupByProperty.Category:
                var queryByCategory = expensesCollection
                                      .Where(s => s.ExpenseDate >= startDate && s.ExpenseDate <= endDate)
                                      .GroupBy(
                    exp => exp.Category,
                    exp => exp.Cost,
                    (date, costs) => new
                {
                    Category = date,
                    Costs    = costs.Sum()
                });

                return(await queryByCategory.ToListAsync());

            case ExpenseGroupByProperty.Title:
                var queryByTitle = expensesCollection
                                   .Where(s => s.ExpenseDate >= startDate && s.ExpenseDate <= endDate)
                                   .GroupBy(
                    exp => exp.Title,
                    exp => exp.Cost,
                    (date, costs) => new
                {
                    Title = date,
                    Costs = costs.Sum()
                });

                return(await queryByTitle.ToListAsync());

            default:
                throw new ArgumentException();
            }
        }
Exemplo n.º 4
0
        public async Task <PagedList <Expense> > GetUserExpenses(Guid userId, ExpensesResourceParameters expensesResourceParameters)
        {
            var collection = await _repository.GetUserExpenses(userId, expensesResourceParameters);

            var listToReturn = await PagedList <Expense> .Create(collection, expensesResourceParameters.PageNumber, expensesResourceParameters.PageSize);

            return(listToReturn);
        }
        public void GetUserExpenses_ExpensesResourceParametersIsNull_ArgumentNullException()
        {
            var testUserGuid = new Guid();
            ExpensesResourceParameters testExpensesResourceParameters = null;

            Assert.ThrowsAsync <ArgumentNullException>
                (async() => await _expenseRepository.GetUserExpenses(testUserGuid, testExpensesResourceParameters));
        }