using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Threading.Tasks;
public int Id { get; set; }
public decimal Amount { get; set; }
public bool IsProcessed { get; set; }
public class PaymentService
private readonly ILogger _logger;
public List<Payment> Payments { get; } = new List<Payment>();
public Task<decimal> ProcessPaymentsAsync()
var validPayments = Payments.Where(p => p.Amount > 0 && !p.IsProcessed).ToList();
var tasks = validPayments.Select(async payment =>
_logger.Log($"Processing Payment {payment.PaymentId}...");
payment.IsProcessed = true;
_logger.Log($"Payment {payment.PaymentId} processed.");
_logger.LogError($"Error processing Payment {payment.PaymentId}", ex);
var results = await Task.WhenAll(tasks);
totalAmount = results.Sum();
_logger.Log($"Total Amount Processed: {totalAmount}");
[Route("api/[controller]")]
public class PaymentController : ControllerBase
private readonly PaymentService _paymentService;
public PaymentController(PaymentService paymentService)
_paymentService = paymentService;
public IActionResult AddPayment([FromBody] Payment payment)
if (payment == null || payment.Amount <= 0)
return BadRequest("Invalid payment details.");
_paymentService.Payments.Add(payment);
return Ok("Payment added successfully.");
public async Task<IActionResult> ProcessPayments()
var totalAmount = await _paymentService.ProcessPaymentsAsync();
return Ok($"Total amount processed: {totalAmount}");
public IActionResult GetPayments()
return Ok(_paymentService.Payments);