using api.Interfaces;
using Microsoft.AspNetCore.Mvc;
using models.Core;
using models.Request;
using models.Response;
namespace api.Controllers;
///
/// Endpoints for Ticket Management
///
/// Injected QR Code Service
/// Injected Ticket Manager Service
[ApiController]
[Route("[controller]")]
public class TicketController(
IQrCodeGenerator qr,
ITicketManager ticketManager) : ControllerBase
{
///
/// Generates a Base64 String Qr Code and Saves Qr Code and Ticket to DB
///
/// Base64 String Qr Code
[HttpPost]
public ActionResult Post([FromBody] AddTicket 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,
EventId = mintRequest.EventId
};
//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);
}
}
///
/// Searches for a ticket with a given ticketId and validates it against the event associated with it.
///
/// A string representing a GUID value
/// Ticket Search Result
[HttpGet]
public ActionResult Get(string ticketId)
{
//TODO: Protect Endpoint
try
{
var result = ticketManager.SearchTicket(ticketId);
return Ok(result);
}
catch (Exception e)
{
return BadRequest(e.Message);
}
}
}