PaymentController(suggested by chatgpt)
Mon Jul 01 2024 11:00:29 GMT+0000 (Coordinated Universal Time)
Saved by @iamkatmakhafola
[Route("api/[controller]")]
[ApiController]
public class PaymentController : ControllerBase
{
private readonly AppDbContext _context;
public PaymentController(AppDbContext context)
{
_context = context;
}
// 8.1 Make Payment
[HttpPost("make-payment")]
public async Task<IActionResult> MakePayment([FromBody] Payment payment)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
_context.Payments.Add(payment);
await _context.SaveChangesAsync();
return CreatedAtAction(nameof(ViewPaymentStatus), new { paymentId = payment.Payment_ID }, payment);
}
// 8.2 Upload Proof Of Payment
[HttpPost("upload-proof-of-payment/{paymentId}")]
public async Task<IActionResult> UploadProofOfPayment(int paymentId, IFormFile file)
{
var payment = await _context.Payments.FindAsync(paymentId);
if (payment == null)
{
return NotFound("Payment not found.");
}
if (file == null || file.Length == 0)
{
return BadRequest("Invalid file.");
}
var filePath = Path.Combine("ProofOfPayments", $"{paymentId}_{file.FileName}");
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
// Assuming you have a field to store the proof of payment path
// payment.ProofOfPaymentPath = filePath; // Uncomment and add this field to the Payment model
_context.Entry(payment).State = EntityState.Modified;
await _context.SaveChangesAsync();
return Ok(new { FilePath = filePath });
}
// 8.3 Search Payment
[HttpGet("search-payment")]
public async Task<IActionResult> SearchPayment([FromQuery] string searchTerm)
{
var payments = await _context.Payments
.Include(p => p.Contract)
.Include(p => p.Payment_Type)
.Where(p => p.Contract.Description.Contains(searchTerm) ||
p.Payment_Type.Payment_Type_Name.Contains(searchTerm))
.ToListAsync();
if (payments == null || !payments.Any())
{
return NotFound("No payments found matching the search term.");
}
return Ok(payments);
}
// 8.4 View Payment Status
[HttpGet("view-payment-status/{paymentId}")]
public async Task<IActionResult> ViewPaymentStatus(int paymentId)
{
var payment = await _context.Payments
.Include(p => p.Contract)
.Include(p => p.Payment_Type)
.FirstOrDefaultAsync(p => p.Payment_ID == paymentId);
if (payment == null)
{
return NotFound("Payment not found.");
}
return Ok(new
{
payment.Payment_ID,
payment.Amount,
payment.Payment_Date,
ContractDescription = payment.Contract.Description,
PaymentTypeName = payment.Payment_Type.Payment_Type_Name,
// payment.ProofOfPaymentPath // Uncomment if this field is added to the Payment model
});
}
}



Comments