mirror of
				https://github.com/zoriya/Kyoo.git
				synced 2025-11-03 19:17:16 -05:00 
			
		
		
		
	Trying to prevent duplicated of related entities
This commit is contained in:
		
							parent
							
								
									e890c05660
								
							
						
					
					
						commit
						9b42680b31
					
				@ -36,7 +36,7 @@ namespace Kyoo.Models
 | 
				
			|||||||
			get { return GenreLinks?.Select(x => x.Genre).OrderBy(x => x.Name); }
 | 
								get { return GenreLinks?.Select(x => x.Genre).OrderBy(x => x.Name); }
 | 
				
			||||||
			set { GenreLinks = value?.Select(x => new GenreLink(this, x)).ToList(); }
 | 
								set { GenreLinks = value?.Select(x => new GenreLink(this, x)).ToList(); }
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		[JsonIgnore] public virtual List<GenreLink> GenreLinks { get; set; }
 | 
							[JsonIgnore] public virtual IEnumerable<GenreLink> GenreLinks { get; set; }
 | 
				
			||||||
		public virtual Studio Studio { get; set; }
 | 
							public virtual Studio Studio { get; set; }
 | 
				
			||||||
		[JsonIgnore] public virtual IEnumerable<PeopleLink> People { get; set; }
 | 
							[JsonIgnore] public virtual IEnumerable<PeopleLink> People { get; set; }
 | 
				
			||||||
		[JsonIgnore] public virtual IEnumerable<Season> Seasons { get; set; }
 | 
							[JsonIgnore] public virtual IEnumerable<Season> Seasons { get; set; }
 | 
				
			||||||
 | 
				
			|||||||
@ -347,8 +347,25 @@ namespace Kyoo.Controllers
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			if (show == null)
 | 
								if (show == null)
 | 
				
			||||||
				return 0;
 | 
									return 0;
 | 
				
			||||||
 | 
								
 | 
				
			||||||
			if (!_database.Entry(show).IsKeySet)
 | 
								if (!_database.Entry(show).IsKeySet)
 | 
				
			||||||
				_database.Shows.Add(show);
 | 
									_database.Shows.Add(show);
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								if (show.Studio != null) // Do not query it if the studio is already attached. // Do not set this value if the database does not found the studio.
 | 
				
			||||||
 | 
									show.Studio = _database.Studios.FirstOrDefault(x => x.Slug == show.Studio.Slug);
 | 
				
			||||||
 | 
								// show.GenreLinks = show.GenreLinks?.Select(x =>
 | 
				
			||||||
 | 
								// {
 | 
				
			||||||
 | 
								// 	x.Genre = _database.Genres.FirstOrDefault(y => y.Slug == x.Genre.Slug) ?? x.Genre;
 | 
				
			||||||
 | 
								// 	return x;
 | 
				
			||||||
 | 
								// });
 | 
				
			||||||
 | 
								// show.People = show.People?.Select(x =>
 | 
				
			||||||
 | 
								// {
 | 
				
			||||||
 | 
								// 	x.People = _database.Peoples.FirstOrDefault(y => y.Slug == x.Slug) ?? x.People;
 | 
				
			||||||
 | 
								// 	return x;
 | 
				
			||||||
 | 
								// });
 | 
				
			||||||
 | 
								// show.Seasons = show.Seasons?.Select(x => _database.Seasons.FirstOrDefault(y => y.SeasonNumber == x.SeasonNumber) ?? x);
 | 
				
			||||||
 | 
								// show.Episodes = show.Episodes?.Select(x => _database.Episodes.FirstOrDefault(y => y.EpisodeNumber == x.EpisodeNumber && y.SeasonNumber == x.SeasonNumber) ?? x);
 | 
				
			||||||
 | 
								//
 | 
				
			||||||
			_database.SaveChanges();
 | 
								_database.SaveChanges();
 | 
				
			||||||
			return show.ID;
 | 
								return show.ID;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
				
			|||||||
@ -65,7 +65,7 @@ namespace Kyoo
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	public class DatabaseContext : DbContext
 | 
						public class DatabaseContext : DbContext
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		public DatabaseContext(DbContextOptions<DatabaseContext> options) : base(options) {}
 | 
							public DatabaseContext(DbContextOptions<DatabaseContext> options) : base(options) { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public DbSet<Library> Libraries { get; set; }
 | 
							public DbSet<Library> Libraries { get; set; }
 | 
				
			||||||
		public DbSet<Collection> Collections { get; set; }
 | 
							public DbSet<Collection> Collections { get; set; }
 | 
				
			||||||
 | 
				
			|||||||
@ -52,8 +52,8 @@ namespace Kyoo
 | 
				
			|||||||
			services.AddDbContext<DatabaseContext>(options =>
 | 
								services.AddDbContext<DatabaseContext>(options =>
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				options.UseLazyLoadingProxies()
 | 
									options.UseLazyLoadingProxies()
 | 
				
			||||||
					.UseSqlite(_configuration.GetConnectionString("Database"));
 | 
										.UseSqlite(_configuration.GetConnectionString("Database"))
 | 
				
			||||||
					//.UseLoggerFactory(LoggerFactory.Create(builder => builder.AddConsole()));
 | 
										.UseLoggerFactory(LoggerFactory.Create(builder => builder.AddConsole()));
 | 
				
			||||||
			});
 | 
								});
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			services.AddDbContext<IdentityDatabase>(options =>
 | 
								services.AddDbContext<IdentityDatabase>(options =>
 | 
				
			||||||
 | 
				
			|||||||
@ -144,9 +144,10 @@ namespace Kyoo.Controllers
 | 
				
			|||||||
			if (seasonNumber == -1)
 | 
								if (seasonNumber == -1)
 | 
				
			||||||
				return null;
 | 
									return null;
 | 
				
			||||||
			Season season = _libraryManager.GetSeason(show.Slug, seasonNumber);
 | 
								Season season = _libraryManager.GetSeason(show.Slug, seasonNumber);
 | 
				
			||||||
			if (season != null)
 | 
								if (season == null)
 | 
				
			||||||
				return await Task.FromResult(season);
 | 
					 | 
				
			||||||
				return await _metadataProvider.GetSeason(show, seasonNumber, library);
 | 
									return await _metadataProvider.GetSeason(show, seasonNumber, library);
 | 
				
			||||||
 | 
								season.Show = show;
 | 
				
			||||||
 | 
								return await Task.FromResult(season);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		private async Task<Episode> GetEpisode(Show show, Season season, long episodeNumber, long absoluteNumber, string episodePath, Library library)
 | 
							private async Task<Episode> GetEpisode(Show show, Season season, long episodeNumber, long absoluteNumber, string episodePath, Library library)
 | 
				
			||||||
 | 
				
			|||||||
@ -47,13 +47,11 @@ namespace Kyoo.Api
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			if (!ModelState.IsValid)
 | 
								if (!ModelState.IsValid)
 | 
				
			||||||
				return BadRequest(show);
 | 
									return BadRequest(show);
 | 
				
			||||||
 | 
								show.ID = 0;
 | 
				
			||||||
			Show old = _libraryManager.GetShowBySlug(slug);
 | 
								Show old = _libraryManager.GetShowBySlug(slug);
 | 
				
			||||||
			if (old == null)
 | 
								if (old == null)
 | 
				
			||||||
				return NotFound();
 | 
									return NotFound();
 | 
				
			||||||
			show.ID = 0;
 | 
								//old = Utility.Complete(old, show);
 | 
				
			||||||
			//Should prevent duplicates (If the user put another studio, it is always created even if there is already a studio with the same slug.
 | 
					 | 
				
			||||||
			old = Utility.Complete(old, show);
 | 
					 | 
				
			||||||
			_libraryManager.RegisterShow(old);
 | 
								_libraryManager.RegisterShow(old);
 | 
				
			||||||
			return Ok();
 | 
								return Ok();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user