ticket-system/source/ticketAPI/api/Services/TicketManager.cs
2024-12-07 19:20:24 -05:00

73 lines
1.8 KiB
C#

using api.Interfaces;
using models.Core;
using models.Enumerations;
using models.Response;
namespace api.Services;
public class TicketManager : ITicketManager
{
public void SaveMintedTicket(Ticket ticket)
{
new data.Tickets.Save().Execute(ticket);
new data.Events.AddTicket().Execute(ticket.Id, ticket.EventId);
}
public TicketSearch SearchTicket(Guid ticketId)
{
var ticket = new data.Tickets.Find().Execute(ticketId);
if (ticket == null)
{
throw new Exception("Ticket not found");
}
var @event = new data.Events.Find().Execute(ticket.EventId);
if (@event == null)
{
throw new Exception("Event not found");
}
var result = new TicketSearch
{
Type = ticket.Type,
Validity = DetermineValidity(@event)
};
return result;
}
public MintResponse GetMintResponse(Guid ticketId)
{
var ticket = new data.Tickets.Find().Execute(ticketId);
if (ticket == null)
{
throw new Exception("Ticket not found");
}
return new MintResponse()
{
Ticket = ticket,
Details = new data.Events.GetDetails().Execute(ticket.EventId),
};
}
private static TicketValidity DetermineValidity(Event @event)
{
if (@event.Date.Day != DateTime.Today.Day) return TicketValidity.Invalid;
if (@event.Date.Day < DateTime.Now.Day)
{
return TicketValidity.Expired;
}
if (DateTime.Now.Hour < @event.Date.Hour - 2)
{
return TicketValidity.Early;
}
return DateTime.Now.Hour > @event.Date.Hour + 5 ? TicketValidity.Expired : TicketValidity.Valid;
}
}