using AyCode.Core.Loggers; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Cors; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json.Linq; using System.Text.Json; using TIAM.Database.DataLayers.Admins; using TIAM.Entities.Emails; using TIAM.Entities.Transfers; using TIAMWebApp.Server.Services; using TIAMWebApp.Shared.Application.Models; using TIAMWebApp.Shared.Application.Models.ClientSide.Payment; namespace TIAMWebApp.Server.Controllers { [Authorize] [ApiController] [EnableCors("_myAllowSpecificOrigins")] [Route("api/v1/[controller]")] public class PaymentAPIController : ControllerBase { private AdminDal _adminDal; private SumupService _sumupService; private readonly TIAM.Core.Loggers.ILogger _logger; private readonly IMessageSenderService _messageSenderService; public PaymentAPIController(AdminDal adminDal, SumupService sumupService, IMessageSenderService messageSenderService, IEnumerable logWriters) { _adminDal = adminDal; _sumupService = sumupService; _messageSenderService = messageSenderService; _logger = new TIAM.Core.Loggers.Logger(logWriters.ToArray()); } [AllowAnonymous] [HttpPost] [Route(APIUrls.CreatePaymentRouteName)] public async Task CreatePayment([FromBody] JsonElement paymentItem) { _logger.Detail($"CreatePayment called! {paymentItem.ToString()}"); var transferToPay = JObject.Parse(paymentItem.GetRawText()).ToObject(); if (transferToPay == null) { return("error"); } if (transferToPay.Price == null) { transferToPay.Price = 1000; } var paymentRequest = new SumupPaymentRequest { CheckoutReference = transferToPay.OrderId.ToString(), Amount = transferToPay.Price.ToString(), Currency = "HUF", PayToEmail = "6befaf69f97f4320bff2b9adf1a3894d@developer.sumup.com", Description = "Test transfer payment" }; var result = await _sumupService.CreateCheckout(paymentRequest); _logger.Detail($"CreatePayment result: {result}"); var checkoutId = result.Id.ToString(); return checkoutId; } [AllowAnonymous] [HttpGet] [Route(APIUrls.GetPaymentRouteName+"/{checkoutId}")] public async Task> GetPaymentById(string checkoutId) { _logger.Detail($"GetPayment called! {checkoutId.ToString()}"); var result = await _sumupService.GetPayment(checkoutId); if (result == null) { return BadRequest(); } else { return Ok(result); } } } }