public IActionResult LikeSong(string trackId)
        {
            User currentUser = database.User.ToList().Find(u => u.Email == LoginController.UserEmail);

            LikedSongs song = ItunesDAL.SaveLike(trackId);

            currentUser.LikedSongs.Add(song);

            var saved = false;

            while (!saved)
            {
                try
                {
                    // Attempt to save changes to the database
                    database.User.Update(currentUser).State = EntityState.Modified;
                    database.SaveChanges();
                    saved = true;
                }
                catch (DbUpdateConcurrencyException ex)
                {
                    foreach (var entry in ex.Entries)
                    {
                        if (entry.Entity is User)
                        {
                            var proposedValues = entry.CurrentValues;
                            var databaseValues = entry.GetDatabaseValues();

                            foreach (var property in proposedValues.Properties)
                            {
                                var proposedValue = proposedValues[property];
                                var databaseValue = databaseValues[property];

                                // TODO: decide which value should be written to database
                                // proposedValues[property] = <value to be saved>;
                            }

                            // Refresh original values to bypass next concurrency check
                            entry.OriginalValues.SetValues(databaseValues);
                        }
                        else
                        {
                            throw new NotSupportedException(
                                      "Don't know how to handle concurrency conflicts for "
                                      + entry.Metadata.Name);
                        }
                    }
                }
            }
            return(RedirectToAction("HomePage"));
        }
        // GET: Shows
        public ActionResult MyShows()
        {
            var         identityID    = User.Identity.GetUserId();
            User        user          = db.Users.Where(u => u.ASPNetIdentityID == identityID).FirstOrDefault();
            List <Show> FinishedShows = db.Shows.Where(s => (s.EndDateTime < DateTime.Now) && (s.Status == "Accepted" || s.Status == "Pending")).ToList();

            ViewBag.DataPoints1 = JsonConvert.SerializeObject(GetShowsPlayed(user));
            ViewBag.DataPoints2 = JsonConvert.SerializeObject(GetShowsBooked(user));

            foreach (var finishedshow in FinishedShows)
            {
                finishedshow.Status = "Finished";
            }
            db.SaveChanges();
            if (User.IsInRole("Musician"))
            {
                User musician = db.Users.Where(u => u.ASPNetIdentityID == identityID).FirstOrDefault();
                return(View(db.User_Show.Where(u => u.MusicianID == musician.ID).Select(s => s.Show).OrderByDescending(s => s.EndDateTime).ToList()));
            }
            if (User.IsInRole("VenueOwner"))
            {
                User venueOwner = db.Users.Where(u => u.ASPNetIdentityID == identityID).FirstOrDefault();
                return(View(db.User_Show.Where(u => u.VenueOwnerID == venueOwner.ID).Select(s => s.Show).OrderByDescending(s => s.EndDateTime).ToList()));
            }

            return(View(db.Shows.ToList()));
        }
        public ActionResult EditSocialMedia()
        {
            var  userId = User.Identity.GetUserId();
            User user   = db.Users.Where(u => u.ASPNetIdentityID == userId).First();

            string facebook  = Request.QueryString["facebook"];
            string instagram = Request.QueryString["instagram"];
            string twitter   = Request.QueryString["twitter"];

            if (IsValidString(facebook))
            {
                user.Facebook = facebook;
            }
            if (IsValidString(instagram))
            {
                user.Instagram = instagram;
            }
            if (IsValidString(twitter))
            {
                user.Twitter = twitter;
            }

            if (User.IsInRole("Musician"))
            {
                string spotify    = Request.QueryString["spotify"];
                string applemusic = Request.QueryString["applemusic"];
                string youtube    = Request.QueryString["youtube"];

                if (IsValidString(spotify))
                {
                    user.Spotify = spotify;
                }
                if (IsValidString(applemusic))
                {
                    user.AppleMusic = applemusic;
                }
                if (IsValidString(youtube))
                {
                    user.Youtube = youtube;
                }
            }

            db.SaveChanges();

            return(View(user));
        }
        public IActionResult Register(User FormUser)
        {
            var output = Database.User.Count(u => u.Email == FormUser.Email);

            if (output == 1)
            {
                TempData["Error"] = "That user already exists.";
                return(View());
            }
            else
            {
                HttpContext.Session.SetString("Email", FormUser.Email.ToString());
                UserEmail         = HttpContext.Session.GetString("Email");
                TempData["Email"] = HttpContext.Session.GetString("Email");
                Database.Add(FormUser);
                Database.SaveChanges();
                return(View(FormUser));
            }
        }
        public async Task <IActionResult> PostParters(IFormFile file, IFormCollection param)
        {
            //  Getting Employees Attribute
            var filePath = $"{_env.WebRootPath}/images/partners/{file.FileName}";
            var partName = param.ContainsKey("partName") ? param["partName"].ToString() : "No Name Specified";

            try
            {
                //  Copying Image to Server Root Directory
                if (file.Length > 0)
                {
                    using (var stream = new FileStream(filePath, FileMode.Create))
                    {
                        await file.CopyToAsync(stream);
                    }
                }

                //Adding Records to Database
                using (var context = new HarmonyContext())
                {
                    var employee = new Employees()
                    {
                        Name      = partName,
                        ImagePath = filePath
                    };

                    context.employees.Add(employee);
                    context.SaveChanges();
                }
            }
            catch (Exception)
            {
                return(BadRequest("Upload Image Failed"));
            }

            return(Ok(filePath));
        }
        public async Task <ActionResult> CreateShow(int?id, MusicianDetailViewModel viewModel)
        {
            // No user id passed through
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            User user = db.Users.Find(id);

            // If users doesn't exisit
            if (user == null)
            {
                return(HttpNotFound());
            }

            // Viewmodel for Musician
            MusicianDetailViewModel model = new MusicianDetailViewModel(user);

            var IdentityID = User.Identity.GetUserId();

            model.VenueList = new SelectList(db.Venues.Where(v => v.User.ASPNetIdentityID == IdentityID), "ID", "VenueName");

            if (ModelState.IsValid)
            {
                // Get user's calendar credentials
                UserCredential credential = await GetCredentialForApiAsync();

                // Create Google Calendar API service.
                var service = new CalendarService(new BaseClientService.Initializer()
                {
                    HttpClientInitializer = credential,
                    ApplicationName       = "Harmony",
                });

                // Fetch the list of calendars.
                var calendars = await service.CalendarList.List().ExecuteAsync();

                // create a new event to google calendar
                if (calendars != null)
                {
                    Event newEvent = new Event()
                    {
                        Id          = Guid.NewGuid().ToString().Replace('-', '0'),
                        Summary     = viewModel.Title,
                        Description = viewModel.ShowDescription,
                        Location    = db.Venues.Find(viewModel.VenueID).VenueName,
                        Start       = new EventDateTime()
                        {
                            DateTime = viewModel.StartDateTime.AddHours(7.0),
                            TimeZone = "America/Los_Angeles"
                        },
                        End = new EventDateTime()
                        {
                            DateTime = viewModel.EndDateTime.AddHours(7.0),
                            TimeZone = "America/Los_Angeles"
                        },
                        Attendees = new List <EventAttendee>()
                        {
                            new EventAttendee()
                            {
                                Email = model.Email
                            }
                        },
                        GuestsCanModify = true
                    };
                    var newEventRequest = service.Events.Insert(newEvent, "primary");
                    // This allows attendees to get email notification
                    newEventRequest.SendNotifications = true;
                    var eventResult = newEventRequest.Execute();

                    // add the new show to db
                    Show newShow = new Show
                    {
                        Title         = viewModel.Title,
                        StartDateTime = viewModel.StartDateTime,
                        EndDateTime   = viewModel.EndDateTime,
                        Description   = viewModel.ShowDescription,
                        DateBooked    = newEvent.Created ?? DateTime.Now,
                        VenueID       = viewModel.VenueID,
                        Status        = "Pending",
                        GoogleEventID = newEvent.Id,
                        ShowOwnerID   = db.Users.Where(u => u.ASPNetIdentityID == IdentityID).First().ID
                    };
                    db.Shows.Add(newShow);
                    User_Show user_Show = new User_Show
                    {
                        MusicianID    = model.ID,
                        VenueOwnerID  = db.Users.Where(u => u.ASPNetIdentityID == IdentityID).First().ID,
                        ShowID        = newShow.ID,
                        MusicianRated = false,
                        VenueRated    = false
                    };
                    db.User_Show.Add(user_Show);
                    db.SaveChanges();
                }

                return(RedirectToAction("MusicianDetails", new { id = model.ID }));
            }
            return(View(model));
        }