TourIAm/TIAMWebApp/Server/Controllers/PaymentAPIController.cs

96 lines
3.3 KiB
C#

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;
private readonly ExchangeRateService _exchangeRateService;
public PaymentAPIController(AdminDal adminDal, SumupService sumupService, IMessageSenderService messageSenderService, IEnumerable<IAcLogWriterBase> logWriters, ExchangeRateService exchangeRateService)
{
_adminDal = adminDal;
_sumupService = sumupService;
_messageSenderService = messageSenderService;
_exchangeRateService = exchangeRateService;
_logger = new TIAM.Core.Loggers.Logger<PaymentAPIController>(logWriters.ToArray());
}
[AllowAnonymous]
[HttpPost]
[Route(APIUrls.CreatePaymentRouteName)]
public async Task<string> CreatePayment([FromBody] JsonElement paymentItem)
{
_logger.Detail($"CreatePayment called! {paymentItem.ToString()}");
var transferToPay = JObject.Parse(paymentItem.GetRawText()).ToObject<Transfer>();
if (transferToPay == null)
{
return("error");
}
if (transferToPay.Price == null)
{
transferToPay.Price = 1000;
}
var exchangeRate = await _exchangeRateService.GetExchangeRateAsync();
var price = transferToPay.Price * Convert.ToDouble(exchangeRate.EURtoHUF);
var paymentRequest = new SumupPaymentRequest
{
CheckoutReference = transferToPay.OrderId.ToString(),
Amount = 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<ActionResult<string>> GetPaymentById(string checkoutId)
{
_logger.Detail($"GetPayment called! {checkoutId.ToString()}");
var result = await _sumupService.GetPayment(checkoutId);
if (result == null)
{
return BadRequest();
}
else
{
return Ok(result);
}
}
}
}