public void FillSuggestions() { var config = Database.GetCollection<Configurations>(Configurations).FindOne(); if (!config.NeedUpdate["SuggestionsUpdate"]) return; var programRepository = new ProgramsRepository(ConnectionString, DatabaseName); var suggestionsRepository = new SuggestionsRepository(ConnectionString, DatabaseName); var programs = programRepository.GetAllPrograms().ToList(); foreach (var program in programs) { if (program.SuggestionsAdded) continue; foreach (var candidate in programs.Where(candidate => program._id != candidate._id)) { bool addSuggested; var oneGenre = false; var writers = false; var directors = false; var twoActors = false; if (program.Genres.SequenceEqual(candidate.Genres)) addSuggested = true; else { if (program.Genres.Except(candidate.Genres).Count() < program.Genres.Count()) oneGenre = true; if (program.Directors.SequenceEqual(candidate.Directors)) directors = true; if (program.Writers.SequenceEqual(candidate.Writers)) writers = true; if (program.Actors.Except(candidate.Actors).Count() <= program.Actors.Count() - 2) twoActors = true; addSuggested = (oneGenre && writers) || (oneGenre && directors) || (oneGenre && twoActors); } if (addSuggested) { AddSuggestion(suggestionsRepository, program, candidate); } } } }
public void FillPeople() { var config = Database.GetCollection<Configurations>(Configurations).FindOne(); if (!config.NeedUpdate["PeopleUpdate"]) return; var programRepository = new ProgramsRepository(ConnectionString, DatabaseName); var programs = programRepository.GetAllPrograms(); foreach (var program in programs) { if (program.PeopleAdded) continue; var peopleRepository = new PeopleRepository(ConnectionString, DatabaseName); //Log Trace.TraceInformation("People: Started Processing Actors..."); foreach (var actor in program.Actors) { AddPerson(peopleRepository, actor, program, "Actor"); } Trace.TraceInformation("People: Finished Processing Actors..."); Trace.TraceInformation("People: Started Processing Directors..."); foreach (var director in program.Directors) { AddPerson(peopleRepository, director, program, "Director"); } Trace.TraceInformation("People: Started Processing Directors..."); Trace.TraceInformation("People: Started Processing Writers..."); foreach (var writer in program.Writers) { AddPerson(peopleRepository, writer, program, "Writer"); } Trace.TraceInformation("People: Started Processing Writers..."); // TODO: REMOVE COMMENT //var updatedProgram = (Programs)program.Clone(); //updatedProgram.PeopleAdded = true; //programRepository.UpdateProgram(updatedProgram); } var updatedConfig = (Configurations) config.Clone(); updatedConfig.NeedUpdate["PeopleUpdate"] = false; var query = Query<Configurations>.EQ(e => e._id, updatedConfig._id); var update = Update<Configurations>.Replace(updatedConfig); // update modifiers Database.GetCollection<Configurations>(Configurations).Update(query, update); }