public async Task <FindAccountCoursePaymentsResponse> Handle(FindAccountCoursePaymentsQuery message) { var validationResult = await _validator.ValidateAsync(message); if (!validationResult.IsValid()) { throw new InvalidRequestException(validationResult.ValidationDictionary); } if (validationResult.IsUnauthorized) { throw new UnauthorizedAccessException(); } var accountId = _hashingService.DecodeValue(message.HashedAccountId); var transactions = await _dasLevyService.GetAccountCoursePaymentsByDateRange <PaymentTransactionLine> (accountId, message.UkPrn, message.CourseName, message.CourseLevel, message.PathwayCode, message.FromDate, message.ToDate); if (!transactions.Any()) { throw new NotFoundException("No transactions found."); } var firstTransaction = transactions.First(); return(new FindAccountCoursePaymentsResponse { ProviderName = firstTransaction.ProviderName, CourseName = firstTransaction.CourseName, CourseLevel = firstTransaction.CourseLevel, PathwayName = firstTransaction.PathwayName, TransactionDate = firstTransaction.TransactionDate, DateCreated = firstTransaction.DateCreated, Transactions = transactions.ToList(), Total = transactions.Sum(c => c.LineAmount) }); }