public async Task <CustomerViewModel> GetAsync(CustomerInquirySearchModel query) { query.ThrowNoValidIf(q => string.IsNullOrEmpty(q.Email) && !q.CustomerID.HasValue, "Bad Request"); query.ThrowNoValidIf(q => !string.IsNullOrEmpty(q.Email) && !q.Email.IsValidEmail(), "Invalid Email"); var searchPredicate = new CustomerInquirySearchCriteriaBuilder().Build(query); var customer = await _unitOfWorkAsync.LoadAsync(searchPredicate, x => x.Transactions); customer.ThrowIfNull("Customer Inquiry is not found"); var recentTransactions = customer.Transactions .OrderByDescending(t => t.DateTime) .Take(CountOfTopRecentElements) .Select(t => new TransactionViewModel { Id = t.Id, Amount = t.Amount, Currency = t.Currency.Code, Date = Helper.Format(t.DateTime), Status = t.Status.GetDescription() }) .ToList(); return(new CustomerViewModel { Id = customer.Id, Name = customer.Name, Email = customer.ContactEmail, Mobile = customer.MobileNo, Transactions = recentTransactions, }); }
public async Task <IHttpActionResult> Get([SearchQuery] CustomerInquirySearchModel query) { return(Ok(await _customerInquiryService.GetAsync(query))); }