using Marco.Pms.Model.Dtos.PaymentGetway; using Marco.Pms.Model.Utilities; using Marco.Pms.Services.Helpers; using MarcoBMS.Services.Helpers; using Microsoft.AspNetCore.Mvc; namespace Marco.Pms.Services.Controllers { [Route("api/[controller]")] [ApiController] public class PaymentController : ControllerBase { private readonly UserHelper _userHelper; private readonly PaymentHelper _paymentHelper; private readonly Guid tenantId; private readonly Guid organizaionId; public PaymentController(UserHelper userHelper, PaymentHelper paymentHelper) { _userHelper = userHelper; _paymentHelper = paymentHelper; tenantId = userHelper.GetTenantId(); organizaionId = userHelper.GetCurrentOrganizationId(); } [HttpPost("create-order")] public async Task CreateOrder([FromBody] CreateOrderDto model) { var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); try { var response = _paymentHelper.CreateOrder(model.Amount, loggedInEmployee, tenantId); return Ok(ApiResponse.SuccessResponse(response, "Payment created successfully", 200)); } catch (Exception ex) { return StatusCode(500, ApiResponse.ErrorResponse("Error occured While creating the payment", new { Message = ex.Message, StackTrace = ex.StackTrace, Source = ex.Source, InnerException = new { Message = ex.InnerException?.Message, StackTrace = ex.InnerException?.StackTrace, Source = ex.InnerException?.Source, } }, 500)); } } [HttpPost("verify-payment")] public IActionResult VerifyPayment([FromBody] PaymentVerificationRequest request) { string payload = request.OrderId + "|" + request.PaymentId; string actualSignature = request.Signature ?? ""; string expectedSignature = _paymentHelper.GetExpectedSignature(payload); if (actualSignature == expectedSignature) { // Payment is verified, process accordingly e.g. update tenant payment details return Ok(new { status = "success" }); } else { return BadRequest(new { status = "failure", message = "Invalid signature" }); } } } }