ticket-system/source/ticketAPI/api/Controllers/TicketController.cs
Tara Wilson 84431ede36 Adding Emailing
Adding Email Verification on Patron Form
Addressing #1 - tickets will span next to ticket form
2024-12-18 15:59:36 -05:00

90 lines
2.3 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("api/[controller]")]
public class TicketController(
IQrCodeGenerator qr,
ITicketManager ticketManager,
IEventManager eventManager) : 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> 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);
}
}
/// <summary>
/// Gets the MintResponse for a saved ticket
/// </summary>
/// <param name="ticketId">Ticket Id</param>
/// <returns></returns>
[HttpGet]
public ActionResult<MintResponse> Get(Guid ticketId)
{
try
{
var response = ticketManager.GetMintResponse(ticketId);
return Ok(response);
}
catch (Exception e)
{
return BadRequest(e.Message);
}
}
}