Beispiel #1
0
        public async Task <IActionResult> SearchExpensesAsync([FromQuery] ExpenseSearchOptions searchOptions)
        {
            var result = await _expenseService.SearchAsync(searchOptions);

            if (result.Errors.Any())
            {
                return(BadRequest(result));
            }

            return(Ok(result));
        }
        public async Task <SearchResult <Expense> > SearchAsync(ExpenseSearchOptions searchOptions)
        {
            var result = new SearchResult <Expense>
            {
                Page     = searchOptions.Page,
                PageSize = searchOptions.PageSize
            };

            try
            {
                if (searchOptions == null)
                {
                    return(result);
                }

                var query = _appDbContext.Expenses.AsQueryable();
                if (searchOptions.DateFrom.HasValue)
                {
                    query = query.Where(x => x.Date >= searchOptions.DateFrom.Value);
                }

                if (searchOptions.DateTo.HasValue)
                {
                    query = query.Where(x => x.Date <= searchOptions.DateTo.Value);
                }

                if (searchOptions.ExpenseTypeId.HasValue)
                {
                    query = query.Where(x => x.ExpenseTypeId == searchOptions.ExpenseTypeId.Value);
                }

                query = query.OrderByDescending(x => x.Date);
                result.TotalResult = await query.CountAsync();

                result.Result = await query.TakeItems(searchOptions.Page, searchOptions.PageSize).GetAsync();
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, $"[{ErrorCode.ExpenseService002}] {ex.Message}");
                result.Errors.Add(new Error(ErrorCode.ExpenseService002));
            }

            return(result);
        }