TourIAm/TIAMWebApp/Server/Controllers/PaymentAPIController.cs

87 lines
2.9 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;
public PaymentAPIController(AdminDal adminDal, SumupService sumupService, IMessageSenderService messageSenderService, IEnumerable<IAcLogWriterBase> logWriters)
{
_adminDal = adminDal;
_sumupService = sumupService;
_messageSenderService = messageSenderService;
_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.Price == null)
{
transferToPay.Price = 1000;
}
else return "false";
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 checkoutUrl = result.Id.ToString();
return checkoutUrl;
}
[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);
}
}
}
}