public IActionResult TicketBuy(int EventId, string BuyerName)
        {
            TempData["Message"] = "";
            if (ModelState.IsValid)
            {
                using (var db = new dbInterviewContext())
                {
                    bool IsBuy = db.Buyer.Any(p => p.EventId == EventId);
                    if (!IsBuy)
                    {
                        Event _event = db.Event.FirstOrDefault(p => p.EventId == EventId);
                        if (_event != null)
                        {
                            Buyer buyer = new Buyer()
                            {
                                EventId   = EventId,
                                BuyerName = BuyerName,
                                TesterKey = "ak"
                            };

                            db.Buyer.Add(buyer);
                            db.SaveChanges();
                        }

                        TempData["Message"] = "Ticket Bought";
                    }
                    else
                    {
                        TempData["Message"] = "Too late!";
                    }
                }
            }
            return(RedirectToAction("TicketBuy", EventId));
        }
 public IActionResult Index()
 {
     using (var db = new dbInterviewContext())
     {
         List <Event> events = db.Event.Where(p => p.Buyer.FirstOrDefault() == null).ToList();
         ViewBag.Message     = TempData["Message"];
         TempData["Message"] = "";
         return(View(events));
     }
 }
        public async Task Get()
        {
            Response.Headers.Add("Content-Type", "text/event-stream");

            Microsoft.AspNetCore.Http.Headers.RequestHeaders headers = Request.GetTypedHeaders();
            bool returnEmpty = true;

            if (headers.Referer.OriginalString.Contains("TicketBuy", StringComparison.InvariantCultureIgnoreCase))
            {
                int eventId = 0;
                if (Int32.TryParse(headers.Referer.Segments[headers.Referer.Segments.Length - 1], out eventId))
                {
                    if (eventId > 0)
                    {
                        bool isTicketBooked = false;

                        using (var db = new dbInterviewContext())
                        {
                            for (int i = 0; i < 4; i++)
                            {
                                await Task.Delay(TimeSpan.FromSeconds(2));

                                bool IsBuy = db.Buyer.Any(p => p.EventId == eventId);
                                if (IsBuy == true)
                                {
                                    //ticket booked

                                    returnEmpty = false;
                                    string dataItem = $"data: {"TICKET_BOOKED"}\n\n";

                                    byte[] dataItemBytes = ASCIIEncoding.ASCII.GetBytes(dataItem);
                                    await Response.Body.WriteAsync(dataItemBytes, 0, dataItemBytes.Length);

                                    await Response.Body.FlushAsync();

                                    break;
                                }
                            }
                        }
                    }
                }
            }

            if (returnEmpty)
            {
                string dataItem = $"data: {""}\n\n";

                byte[] dataItemBytes = ASCIIEncoding.ASCII.GetBytes(dataItem);
                await Response.Body.WriteAsync(dataItemBytes, 0, dataItemBytes.Length);

                await Response.Body.FlushAsync();
            }
        }
        public IActionResult TicketBuy(int Id)
        {
            if (Id > 0)
            {
                using (var db = new dbInterviewContext())
                {
                    EventViewModel eventViewModel = db.Event.Where(p => p.EventId == Id).Select(p => new EventViewModel()
                    {
                        EventId               = p.EventId,
                        TimeoutInSeconds      = p.TimeoutInSeconds,
                        IsTickedAlreadyBought = p.Buyer.FirstOrDefault() == null ? false : true
                    }).FirstOrDefault();

                    ViewBag.Message     = TempData["Message"];
                    TempData["Message"] = "";

                    if (eventViewModel != null)
                    {
                        return(View(eventViewModel));
                    }
                }
            }
            return(RedirectToAction("Index"));
        }
 public EventRepository(dbInterviewContext _context)
 {
     context = _context;
 }
 public BuyerRepository(dbInterviewContext _context, IEventRepository eventRepository)
 {
     context          = _context;
     _EventRepository = eventRepository;
 }