public EventModel RespondToEvent(RespondToEventRequest respondToEventRequest) { var userEvent = _repository.GetEntities<UserEvent>() .FirstOrDefault( p => p.EventId == respondToEventRequest.EventId && p.UserId.Equals(respondToEventRequest.UserId)); if (userEvent != null) { userEvent.Response = respondToEventRequest.EventResponse; _repository.Update(userEvent); } else { var newUserEvent = new UserEvent() { UserId = respondToEventRequest.UserId, EventId = respondToEventRequest.EventId, Response = respondToEventRequest.EventResponse }; _repository.Add(newUserEvent); } _repository.SaveChanges(); userEvent = _repository.GetEntities<UserEvent>() .FirstOrDefault( p => p.EventId == respondToEventRequest.EventId && p.UserId.Equals(respondToEventRequest.UserId)); var goingUsers = GetGoingStatus(userEvent, EventResponse.Going); var tentativeUsers = GetGoingStatus(userEvent, EventResponse.Tentative); var notNowUsers = GetGoingStatus(userEvent, EventResponse.NotNow); return new EventModel() { Going = userEvent != null && userEvent.Response.Equals(EventResponse.Going.ToString()), Tentative = userEvent != null && userEvent.Response.Equals(EventResponse.Tentative.ToString()), NotNow = userEvent != null && userEvent.Response.Equals(EventResponse.NotNow.ToString()), GoingUsers = goingUsers, TentativeUsers = tentativeUsers, NotNowUsers = notNowUsers }; }
private List<UserModel> GetGoingStatus(UserEvent userEvent, EventResponse eventResponse) { var response = eventResponse.ToString(); return _repository.GetEntities<Event>() .Where(e => e.Id == userEvent.EventId) .SelectMany(e => e.UserEvents) .Include(e => e.AspNetUser.UserInfo) .Where(ue => ue.Response.Equals(response)) .Select(u => new UserModel { FullName = u.AspNetUser.UserInfo.FullName }) .ToList(); }