public EventSnippets UserActiveEvent(string UserID) { UserEvents activeEvent = db.UserEvents.Include(x => x.Event).Where(x => x.UserID == UserID && !x.Finished).FirstOrDefault(); if (activeEvent == null) { return(null); } if (activeEvent.Event.End < Utilities.DateHelper.GetCurrentTime()) { activeEvent.Finished = true; db.SaveChanges(); return(null); } EventSnippets result = db.UserEvents.Include(x => x.Event).Include(x => x.Event.EventSnippets).Where(x => x.UserID == UserID && !x.Finished) .SelectMany(x => x.Event.EventSnippets.Where(y => y.OrderNumber == x.Event.EventSnippets.Max(t => t.OrderNumber))).FirstOrDefault(); //if() //EventSnippets result = activeEvent.Event.EventSnippets.SelectMany(x => x.Event.EventSnippets.Where(y => y.OrderNumber == x.Event.EventSnippets.Max(t => t.OrderNumber))).FirstOrDefault(); return(result); }
//id == orderNumber public ActionResult Game(int id) { string userID = User.Identity.GetUserId(); var userActiveEvent = _userService.UserActiveEvent(userID); var validateEvent = _eventService.GetEventById(id); //Event doesnt exist , its finished or it is not started yet if (validateEvent == null || validateEvent.End < DateHelper.GetCurrentTime() || validateEvent.Start > DateHelper.GetCurrentTime()) { return(RedirectToAction("Start")); } //Has no active events start a new one if (userActiveEvent == null) { EventSnippets firstSnippet = _userService.BeginEvent(User.Identity.GetUserId(), validateEvent.ID); //Already participated and finished if (firstSnippet == null) { TempData["EventFinished"] = true; return(RedirectToAction("Result")); } _snippetService.CreateInitialAnswer(userID, firstSnippet.EventID, firstSnippet.SnippetID); userActiveEvent = _userService.UserActiveEvent(userID); ViewBag.lastOrderNumber = userActiveEvent.OrderNumber; firstSnippet.Event = validateEvent; return(View(firstSnippet)); //return view with first snippet } //Has active event but wants to start another one if (userActiveEvent.EventID != validateEvent.ID) { // should redirect to lobby of the event TempData["RedirectToLobbyMsg"] = true; return(RedirectToAction("Lobby", new { id = userActiveEvent.EventID })); } int lastAnsweredOrderNumber = _snippetService.GetLastAnsweredSnippetOrderNumber(userID, userActiveEvent.EventID); if (++lastAnsweredOrderNumber > userActiveEvent.OrderNumber) { _eventService.FinishEventForUser(userActiveEvent.EventID, userID); TempData["EventFinished"] = true; return(RedirectToAction("Result")); } var model = _snippetService.GetSnippetWithOrderNumber(lastAnsweredOrderNumber, userActiveEvent.EventID); _snippetService.CreateInitialAnswer(userID, userActiveEvent.EventID, model.SnippetID); ViewBag.lastOrderNumber = userActiveEvent.OrderNumber; model.Event = validateEvent; return(View(model)); }
public bool AddOrUpdateEvent(Event ev, List <Int32> IDs) { int res; List <EventSnippets> snippetEvents = new List <EventSnippets>(); for (int i = 0; i < IDs.Count; i++) { EventSnippets snippetEvent = new EventSnippets { SnippetID = IDs[i], OrderNumber = i + 1 }; snippetEvents.Add(snippetEvent); } if (ev.ID > 0) { Event eventToUpdate = db.Events.Where(x => x.ID == ev.ID).Include(x => x.EventSnippets).FirstOrDefault(); db.EventSnippets.RemoveRange(eventToUpdate.EventSnippets); res = db.SaveChanges(); eventToUpdate.Name = ev.Name; eventToUpdate.Description = ev.Description; eventToUpdate.Start = ev.Start; eventToUpdate.End = ev.End; snippetEvents.ForEach(x => x.EventID = ev.ID); eventToUpdate.EventSnippets = snippetEvents; res = db.SaveChanges(); } else { ev.EventSnippets = snippetEvents; db.Events.Add(ev); res = db.SaveChanges(); } return(res > 0); }