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("api/[controller]")] public class TicketController( IQrCodeGenerator qr, ITicketManager ticketManager, IEventManager eventManager) : 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 request) { //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 = request.Type, EventId = request.EventId, SeasonId = request.SeasonId, Patron = request.Patron, }; //save the minted ticket ticketManager.SaveMintedTicket(ticket); //return var response = new MintResponse { Ticket = ticket, Details = eventManager.GetEvent(ticket.EventId) }; if (!string.IsNullOrEmpty(ticket.Patron.Email)) { } return Ok(response); } catch (Exception e) { return BadRequest(e.Message); } } /// /// Gets the MintResponse for a saved ticket /// /// Ticket Id /// [HttpGet] public ActionResult Get(Guid ticketId) { try { var response = ticketManager.GetMintResponse(ticketId); return Ok(response); } catch (Exception e) { return BadRequest(e.Message); } } }