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); } } }