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); }