public void handleUserDatabase(dotnetfinalDbContext db) { bool done = false; User userToBeAdded = null; while (!done) { //TODO: Add input checks Console.WriteLine("Please answer the following questions."); Console.Write("Age: "); int age = Convert.ToInt32(Console.ReadLine()); Console.Write("Biological Sex (Female, Male, or Other): "); string sex = Console.ReadLine().ToUpper().Substring(0, 1); Console.Write("Zip code: "); string zip = Console.ReadLine(); userToBeAdded = new User() { Age = age, Gender = sex, ZipCode = zip }; string jobTitle; Occupation foundJob; while (true) { foreach (Occupation job in db.Occupations) { Console.WriteLine(job.Name); } Console.Write("Please select your ocupation from the above list: "); jobTitle = Console.ReadLine(); foundJob = db.Occupations.Where(o => o.Name.Contains(jobTitle)).FirstOrDefault(); if (foundJob != null) { userToBeAdded.Occupation = foundJob; userToBeAdded.OccupationId = foundJob.Id; break; } else { Console.WriteLine("Not a valid job, please try again."); } } Console.WriteLine("User will be created will following values: \n" + "Age: " + age + "\n" + "Gender: " + sex + " \n" + "ZipCode: " + zip + "\n" + "Occupation: " + jobTitle + "\n" + "Is the above information correct? (Y/n)"); if (Console.ReadLine().ToUpper() == "N") { Console.WriteLine("restarting user creation..."); } else { db.Users.Add(userToBeAdded); done = true; Console.WriteLine("Exiting user creation and saving..."); } } db.SaveChanges(); Console.WriteLine("Would you like to rate any movies as this user? (Y/n)"); if (Console.ReadLine().ToUpper() != "N") { if (userToBeAdded == null) { throw new Exception("User is null, yet trying to rate a movie"); } while (true) { Movie searchedMovie = searchForMovie(db); int ratingNum; while (true) { Console.WriteLine("What would you rate this movie out of 5?"); ratingNum = Convert.ToInt32(Console.ReadLine()); if (ratingNum >= 1 && ratingNum <= 5) { break; } else { Console.WriteLine("Invalid rating, please try again."); } } UserMovie rating = new UserMovie { User = userToBeAdded, Movie = searchedMovie, RatedAt = DateTime.Now, Rating = ratingNum }; Console.WriteLine("You rated " + searchedMovie.Title + " " + ratingNum + "/5"); db.Add(rating); db.SaveChanges(); Console.WriteLine("Are you done adding ratings? (y/N)"); if (Console.ReadLine().ToLower().Equals("y")) { break; } } } else { Console.WriteLine("Closing application..."); } }
public void handleMediaSqlOperation(dotnetfinalDbContext db) { bool done = false; while (!done) { Console.Write("What action would you like to take? \n 1. Search for an item (Includes Criterion Searches) \n 2. Add an item \n 3. Update an item \n 4. Delete an item (WILL DELETE ALL ASSOCIATED RECORDS!) \n Action Number: "); switch (Convert.ToInt32(Console.ReadLine())) { case 1: //Search & Stats Console.WriteLine("Options for searching: \n 1. Basic Search \n 2. Top Rated by criterion"); switch (Convert.ToInt32(Console.ReadLine())) { //Basic Search case 1: Movie movie = searchForMovie(db); printMovieDetails(movie); break; //Rating by bracket case 2: while (true) { Console.WriteLine("Sort by Occupation or Age? (O/A)"); string bracket = Console.ReadLine().Substring(0, 1).ToUpper(); if (bracket.Equals("O")) { Occupation foundJob; //Loop for getting occupation to sort by while (true) { foreach (Occupation job in db.Occupations) { Console.WriteLine(job.Name); } Console.Write("Occupation from above list to sort by: "); String jobTitle = Console.ReadLine(); foundJob = db.Occupations.Where(o => o.Name.Contains(jobTitle)).FirstOrDefault(); if (foundJob != null) { break; } else { Console.WriteLine("Not a valid job, please try again."); } } //Use the occupation to print results Console.WriteLine("Printing first movie rating by users with occupation " + foundJob.Name); UserMovie data = db.UserMovies.Where(um => um.User.Occupation == foundJob).OrderBy(um => um.Movie.Title).FirstOrDefault(); if (data != null) { Console.WriteLine(data.Movie.Title + " | " + data.Rating + "/5"); } else { Console.WriteLine("No ratings found for that occupation."); } break; } else if (bracket.Equals("A")) { //Loop to find proper age int sortAge; while (true) { Console.WriteLine("What age would you like to sort by?"); sortAge = Convert.ToInt32(Console.ReadLine()); if (sortAge >= 1 || sortAge <= 150) { break; } else { Console.WriteLine("Please enter a valid age (between 1 and 150)"); } } UserMovie data = db.UserMovies.Where(um => um.User.Age == sortAge).OrderBy(um => um.Movie.Title).FirstOrDefault(); if (data != null) { Console.WriteLine(data.Movie.Title + " | Rated: " + data.Rating + "/5"); } else { Console.WriteLine("No ratings found for that occupation."); } break; } else { Console.WriteLine("Not a valid choice, please try again."); } } break; } break; case 2: //Add bool adding = true; while (adding) { Console.Write("Title: "); string title = Console.ReadLine(); if (title != null && title.Length > 0) { Console.WriteLine("Release Date (yyyy-mm-dd): "); string date = Console.ReadLine(); if (date.Length == 10) { //0 is year, 1 is month, 2 is day string[] dateFormat = date.Split('-'); DateTime releaseDate = new DateTime( Convert.ToInt32(dateFormat[0]), //Year Convert.ToInt32(dateFormat[1]), //Month Convert.ToInt32(dateFormat[2])); //Day //Create the movie Movie thisMovie = new Movie { Title = title, ReleaseDate = releaseDate, //Id = db.Movies.OrderBy(item => item.Id).Last().Id + 1, }; //Find the Genres allowed string allowedGenres = ""; foreach (var genre in db.Genres) { allowedGenres += "" + genre.Name + ", "; } //Ask what genres to use Console.WriteLine("Please choose genres for movie (You can choose more than one by using this format: Comedy|Romance|Action) \n" + "Avaialable genres: \n " + allowedGenres); string[] chosenGenres = Console.ReadLine().Split('|'); List <MovieGenre> movieGenresUsed = new List <MovieGenre> { }; //Add the genres to the movie foreach (string genre in chosenGenres) { //Console.WriteLine("Looking for genre " + genre); Genre tempGenre = db.Genres.Where(tG => tG.Name.ToLower().Equals(genre.ToLower())).FirstOrDefault(); //Console.WriteLine("Found genre! JSON: \n " + JsonConvert.SerializeObject(tempGenre)); if (tempGenre != null) { MovieGenre tempMovieGenre = new MovieGenre() { Movie = thisMovie, //MovieId = thisMovie.Id, Genre = tempGenre, //GenreId = tempGenre.Id, }; thisMovie.MovieGenres.Add(tempMovieGenre); movieGenresUsed.Add(tempMovieGenre); } else { Console.WriteLine("Error in your genre " + genre + ", skipping."); } } //Check to make sure everything is ok to user Console.WriteLine("Are the above notices acceptable? (Y/n)"); if (!(Console.ReadLine().ToLower().Equals('n'))) { //Actually add the movie db.Movies.Add(thisMovie); //Add the movie genres Console.WriteLine("Got here"); //Console.WriteLine(JsonConvert.SerializeObject(movieGenresUsed[0])); foreach (MovieGenre movieGenre in movieGenresUsed) { db.MovieGenres.Add(movieGenre); } //Save changes db.SaveChanges(); adding = false; } else { Console.WriteLine("Repeating..."); } } else { Console.WriteLine("Error in date format, please try again."); } } else { Console.WriteLine("Error in name format, please try again."); } } break; case 3: //Update bool updating = true; while (updating) { Movie movieToUpdate = searchForMovie(db); Console.WriteLine(movieToUpdate.Title + " selected..."); printMovieDetails(movieToUpdate); db.Attach(movieToUpdate); Console.WriteLine("What would you like to update? \n 1. Title \n 2. Release date"); DateTime modifiedDate; string modifiedTitle; switch (Convert.ToInt32(Console.ReadLine())) { case 1: //Title while (true) { Console.WriteLine("What would you like the new title to be?"); modifiedTitle = Console.ReadLine(); if (modifiedTitle != null) { movieToUpdate.Title = modifiedTitle; db.Entry(movieToUpdate).Property("Title").IsModified = true; break; } else { Console.WriteLine("Error, title cannot be empty, restarting..."); } } break; case 2: //Release Date while (true) { Console.WriteLine("What would you like the new date to be? (yyyy-mm-dd)"); string date = Console.ReadLine(); if (date.Length == 10) { //0 is year, 1 is month, 2 is day string[] dateFormat = date.Split('-'); modifiedDate = new DateTime( Convert.ToInt32(dateFormat[0]), //Year Convert.ToInt32(dateFormat[1]), //Month Convert.ToInt32(dateFormat[2])); //Day break; } else { Console.WriteLine("Error in format, please try again."); } } db.Entry(movieToUpdate).Property("ReleaseDate").IsModified = true; break; } Console.WriteLine("Is the above information correct? (Y/n)"); db.SaveChanges(); if (!Console.ReadLine().ToLower().Equals('n')) { updating = false; } } break; case 4: //Delete bool deleting = true; while (deleting) { Movie movieToDelete = searchForMovie(db); //Delete any associated MovieGenre foreach (MovieGenre i in db.MovieGenres.Where(mg => mg.MovieId == movieToDelete.Id)) { db.Remove(i); } //Delete any reviews foreach (UserMovie i in db.UserMovies.Where(um => um.MovieId == movieToDelete.Id)) { db.Remove(i); } //Delete movie db.Remove(movieToDelete); db.SaveChanges(); break; } break; } break; } }