public bool Unmark_Interest(Interest_Request request)
        {
            var userInterest = _db.User_Talk_Interests.FirstOrDefault(x => x.User_ID == request.User_ID && x.Talk_ID == request.Talk_ID);

            if (userInterest != null)
            {
                _db.User_Talk_Interests.Remove(userInterest);
                _db.SaveChanges();

                return(true);
            }

            return(false);
        }
 public bool Unmark_Interested([FromBody] Interest_Request model)
 {
     return(_talkService.Unmark_Interest(model));
 }
 public Interest_Result Mark_Interested_Overwrite([FromBody] Interest_Request model)
 {
     return(_talkService.Log_Interest(model, true));
 }
 public Interest_Result Mark_Interested([FromBody] Interest_Request model)
 {
     return(_talkService.Log_Interest(model, false));
 }
        public Interest_Result Log_Interest(Interest_Request request, bool overwrite)
        {
            var existingTalk = _db.Talks
                               .Include(x => x.Tags)
                               .ThenInclude(x => x.Tag)
                               .Include(x => x.Author)
                               .ThenInclude(x => x.User)
                               .FirstOrDefault(x => x.ID == request.Talk_ID);

            if (overwrite)
            {
                var ticketInterest = _db.User_Talk_Interests.FirstOrDefault(x => x.Talk_ID == request.Talk_ID && x.User_ID == request.User_ID);

                ticketInterest.Talk_ID = request.Overwrite_ID;

                _db.User_Talk_Interests.Update(ticketInterest);
                _db.SaveChanges();

                return(new Interest_Result()
                {
                    Success = true,
                    Interest_Talk = null,
                    Overwrite_Talk = null
                });
            }
            else
            {
                var existingInterests = _db.User_Talk_Interests.Where(x => x.User_ID == request.User_ID);

                if (existingInterests.Count() == 0)
                {
                    User_Talk_Interest userInterest = new User_Talk_Interest()
                    {
                        ID      = Guid.NewGuid().ToString(),
                        Talk_ID = request.Talk_ID,
                        User_ID = request.User_ID
                    };

                    _db.User_Talk_Interests.Add(userInterest);
                    _db.SaveChanges();

                    return(new Interest_Result()
                    {
                        Success = true,
                        Interest_Talk = null,
                        Overwrite_Talk = null
                    });
                }
                else
                {
                    var conflictingSessions = existingInterests.Where(x => x.Talk.Start >= existingTalk.Start && x.Talk.End <= existingTalk.End).Count();

                    if (conflictingSessions > 0)
                    {
                        var conflictingTalk = existingInterests
                                              .Include(x => x.Talk)
                                              .ThenInclude(x => x.Tags)
                                              .Include(x => x.Talk)
                                              .ThenInclude(x => x.Author)
                                              .ThenInclude(x => x.User)
                                              .Where(x => x.Talk.Start >= existingTalk.Start && x.Talk.End <= existingTalk.End && x.Talk_ID != existingTalk.ID).FirstOrDefault().Talk;

                        return(new Interest_Result()
                        {
                            Success = false,
                            Interest_Talk = new Basic_Talk_Info()
                            {
                                ID = existingTalk.ID,
                                Name = existingTalk.Title,
                                Author = new Models.ViewModels.Author.Basic_Author_Info()
                                {
                                    First_Name = existingTalk.Author.User.First_Name,
                                    Last_Name = existingTalk.Author.User.Last_Name
                                },
                                Description = existingTalk.Description,
                                Start = existingTalk.Start,
                                End = existingTalk.End,
                                Tags = existingTalk.Tags.Select(x => x.Tag.Name).ToList()
                            },
                            Overwrite_Talk = new Basic_Talk_Info()
                            {
                                ID = conflictingTalk.ID,
                                Name = conflictingTalk.Title,
                                Author = new Models.ViewModels.Author.Basic_Author_Info()
                                {
                                    First_Name = conflictingTalk.Author.User.First_Name,
                                    Last_Name = conflictingTalk.Author.User.Last_Name
                                },
                                Description = conflictingTalk.Description,
                                Start = conflictingTalk.Start,
                                End = conflictingTalk.End
                            }
                        });
                    }
                    else
                    {
                        User_Talk_Interest userInterest = new User_Talk_Interest()
                        {
                            ID      = Guid.NewGuid().ToString(),
                            Talk_ID = request.Talk_ID,
                            User_ID = request.User_ID
                        };

                        _db.User_Talk_Interests.Add(userInterest);
                        _db.SaveChanges();

                        return(new Interest_Result()
                        {
                            Success = true,
                            Interest_Talk = null,
                            Overwrite_Talk = null
                        });
                    }
                }
            }
        }