Starting to rightfully handle the delete function

This commit is contained in:
Zoe Roux 2020-06-19 19:10:08 +02:00
parent 74fabb11ea
commit 6cb7946569
12 changed files with 73 additions and 11 deletions

View File

@ -15,7 +15,7 @@ namespace Kyoo.Controllers
Task<int> Create([NotNull] T obj);
Task<int> CreateIfNotExists([NotNull] T obj);
Task Edit([NotNull] T edited, bool resetOld);
Task Delete(T obj);
Task Delete([NotNull] T obj);
}
public interface IShowRepository : IRepository<Show>

View File

@ -41,6 +41,22 @@ namespace Kyoo.Models
[JsonIgnore] public virtual IEnumerable<PeopleLink> People { get; set; }
[JsonIgnore] public virtual IEnumerable<Season> Seasons { get; set; }
[JsonIgnore] public virtual IEnumerable<Episode> Episodes { get; set; }
[NotMergable] [JsonIgnore] public virtual IEnumerable<LibraryLink> LibraryLinks { get; set; }
[NotMergable] [JsonIgnore] public IEnumerable<Library> Libraries
{
get => LibraryLinks?.Select(x => x.Library);
set => LibraryLinks = value?.Select(x => new LibraryLink(x, this));
}
[NotMergable] [JsonIgnore] public IEnumerable<CollectionLink> CollectionLinks { get; set; }
[NotMergable] [JsonIgnore] public IEnumerable<Collection> Collections
{
get => CollectionLinks.Select(x => x.Collection);
set => CollectionLinks = value?.Select(x => new CollectionLink(x, this));
}
public Show() { }

View File

@ -155,6 +155,12 @@ namespace Kyoo.Controllers
public async Task Delete(Episode obj)
{
if (obj.ExternalIDs != null)
foreach (MetadataID entry in obj.ExternalIDs)
_database.Entry(entry).State = EntityState.Deleted;
if (obj.Tracks != null)
foreach (Track entry in obj.Tracks)
_database.Entry(entry).State = EntityState.Deleted;
_database.Episodes.Remove(obj);
await _database.SaveChangesAsync();
}

View File

@ -56,7 +56,7 @@ namespace Kyoo.Controllers
if (obj == null)
throw new ArgumentNullException(nameof(obj));
await _database.Genres.AddAsync(obj);
_database.Entry(obj).State = EntityState.Added;
try
{

View File

@ -126,7 +126,12 @@ namespace Kyoo.Controllers
public async Task Delete(Library obj)
{
_database.Libraries.Remove(obj);
if (obj == null)
throw new ArgumentNullException(nameof(obj));
_database.Entry(obj).State = EntityState.Deleted;
if (obj.ProviderLinks != null)
foreach (ProviderLink entry in obj.ProviderLinks)
_database.Entry(entry).State = EntityState.Deleted;
await _database.SaveChangesAsync();
}
}

View File

@ -125,7 +125,12 @@ namespace Kyoo.Controllers
public async Task Delete(People obj)
{
_database.Peoples.Remove(obj);
if (obj == null)
throw new ArgumentNullException(nameof(obj));
_database.Entry(obj).State = EntityState.Deleted;
if (obj.ExternalIDs != null)
foreach (MetadataID entry in obj.ExternalIDs)
_database.Entry(entry).State = EntityState.Deleted;
await _database.SaveChangesAsync();
}
}

View File

@ -112,7 +112,9 @@ namespace Kyoo.Controllers
public async Task Delete(ProviderID obj)
{
_database.Providers.Remove(obj);
if (obj == null)
throw new ArgumentNullException(nameof(obj));
_database.Entry(obj).State = EntityState.Deleted;
await _database.SaveChangesAsync();
}
}

View File

@ -144,7 +144,12 @@ namespace Kyoo.Controllers
public async Task Delete(Season obj)
{
_database.Seasons.Remove(obj);
if (obj == null)
throw new ArgumentNullException(nameof(obj));
_database.Entry(obj).State = EntityState.Deleted;
if (obj.ExternalIDs != null)
foreach (MetadataID entry in obj.ExternalIDs)
_database.Entry(entry).State = EntityState.Deleted;
await _database.SaveChangesAsync();
}

View File

@ -163,9 +163,26 @@ namespace Kyoo.Controllers
}
}
public async Task Delete(Show show)
public async Task Delete(Show obj)
{
_database.Shows.Remove(show);
if (obj == null)
throw new ArgumentNullException(nameof(obj));
_database.Entry(obj).State = EntityState.Deleted;
if (obj.GenreLinks != null)
foreach (GenreLink entry in obj.GenreLinks)
_database.Entry(entry).State = EntityState.Deleted;
if (obj.People != null)
foreach (PeopleLink entry in obj.People)
_database.Entry(entry).State = EntityState.Deleted;
if (obj.ExternalIDs != null)
foreach (MetadataID entry in obj.ExternalIDs)
_database.Entry(entry).State = EntityState.Deleted;
if (obj.CollectionLinks != null)
foreach (CollectionLink entry in obj.CollectionLinks)
_database.Entry(entry).State = EntityState.Deleted;
if (obj.LibraryLinks != null)
foreach (LibraryLink entry in obj.LibraryLinks)
_database.Entry(entry).State = EntityState.Deleted;
await _database.SaveChangesAsync();
}

View File

@ -111,7 +111,9 @@ namespace Kyoo.Controllers
public async Task Delete(Studio obj)
{
_database.Studios.Remove(obj);
if (obj == null)
throw new ArgumentNullException(nameof(obj));
_database.Entry(obj).State = EntityState.Deleted;
await _database.SaveChangesAsync();
}
}

View File

@ -101,7 +101,9 @@ namespace Kyoo.Controllers
public async Task Delete(Track obj)
{
_database.Tracks.Remove(obj);
if (obj == null)
throw new ArgumentNullException(nameof(obj));
_database.Entry(obj).State = EntityState.Deleted;
await _database.SaveChangesAsync();
}
}

View File

@ -116,7 +116,9 @@ namespace Kyoo
.Ignore(x => x.Shows);
modelBuilder.Entity<Show>()
.Ignore(x => x.Genres);
.Ignore(x => x.Genres)
.Ignore(x => x.Libraries)
.Ignore(x => x.Collections);
modelBuilder.Entity<PeopleLink>()
.Ignore(x => x.Slug)