62 lines
1.5 KiB
C#
62 lines
1.5 KiB
C#
using api.Interfaces;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using models.Core;
|
|
using models.Request;
|
|
using models.Response;
|
|
|
|
namespace api.Controllers;
|
|
|
|
/// <summary>
|
|
/// Endpoints for Ticket Management
|
|
/// </summary>
|
|
/// <param name="qr">Injected QR Code Service</param>
|
|
/// <param name="ticketManager">Injected Ticket Manager Service</param>
|
|
[ApiController]
|
|
[Route("[controller]")]
|
|
public class TicketController(
|
|
IQrCodeGenerator qr,
|
|
ITicketManager ticketManager) : ControllerBase
|
|
{
|
|
/// <summary>
|
|
/// Generates a Base64 String Qr Code and Saves Qr Code and Ticket to DB
|
|
/// </summary>
|
|
/// <returns>Base64 String Qr Code</returns>
|
|
[HttpPost]
|
|
public ActionResult<MintResponse> AddTicket([FromBody] MintTickets mintRequest)
|
|
{
|
|
//TODO: Protect Endpoint
|
|
|
|
//generate ticket id
|
|
var ticketId = Guid.NewGuid();
|
|
|
|
try
|
|
{
|
|
//generate the qr code
|
|
var qrCode = qr.GenerateQrCode(ticketId.ToString());
|
|
|
|
//build the ticket
|
|
var ticket = new Ticket
|
|
{
|
|
Id = ticketId,
|
|
QrCode = qrCode,
|
|
Type = mintRequest.Type,
|
|
};
|
|
|
|
//save the minted ticket
|
|
ticketManager.SaveMintedTicket(ticket);
|
|
|
|
//return
|
|
var response = new MintResponse
|
|
{
|
|
QrCode = ticket.QrCode,
|
|
Type = ticket.Type
|
|
};
|
|
|
|
return Ok(response);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
return BadRequest(e.Message);
|
|
}
|
|
}
|
|
} |