public async Task <List <ExpenseSearchResult> > Search(ExpenseSearchOptionsDto searchOptions, string userId) { searchOptions.SearchTerm = string.IsNullOrEmpty(searchOptions.SearchTerm) ? string.Empty : searchOptions.SearchTerm; var searchTermParam = new SqlParameter("searchTerm", searchOptions.SearchTerm); var walletIdParam = new SqlParameter("walletId", searchOptions.WalletId.ToDeobfuscated()); var dateFromParam = new SqlParameter("dateFrom", searchOptions.DateFrom); var dateToParam = new SqlParameter("dateTo", searchOptions.DateTo); var batchSizeParam = new SqlParameter("batchSize", searchOptions.BatchSize); var toSkipParam = new SqlParameter("toSkip", searchOptions.Page * searchOptions.BatchSize); var currentUserIdParam = new SqlParameter("currentUserId", userId); var categoryParam = new SqlParameter("category", (int)searchOptions.Category); if (searchOptions.Category == ExpenseCategory.All) { categoryParam.Value = DBNull.Value; } var typeParam = new SqlParameter("type", (int)searchOptions.Type); if (searchOptions.Type == BalanceType.All) { typeParam.Value = DBNull.Value; } return(await Context.SearchExpenses .FromSql( "exec budget_SearchExpenses @searchTerm, @walletId, @dateFrom, @dateTo, @batchSize, @toSkip, @currentUserId, @category, @type", searchTermParam, walletIdParam, dateFromParam, dateToParam, batchSizeParam, toSkipParam, currentUserIdParam, categoryParam, typeParam).ToListAsync()); }
public async Task <IActionResult> Search([FromQuery] ExpenseSearchOptionsDto searchOptions) { searchOptions.DateFrom = searchOptions.DateFrom.StartOfDay(); searchOptions.DateTo = searchOptions.DateTo.EndOfDay(); var result = await _expenseSearchService.Search(searchOptions, UserId); return(Ok(result)); }
public async Task <PagedSearchResults <ExpenseDto> > Search(ExpenseSearchOptionsDto searchOptions, string userId) { var hasUserAccess = await _walletPermissionService.HasUserAccess(searchOptions.WalletId.ToDeobfuscated(), userId); if (!hasUserAccess) { return(new PagedSearchResults <ExpenseDto>()); } var resultsFromDb = await _expenseRepository.Search(searchOptions, userId); return(new PagedSearchResults <ExpenseDto> { Results = Mapper.Map <List <ExpenseDto> >(resultsFromDb), Total = resultsFromDb.FirstOrDefault()?.Total ?? 0 }); }