mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-09 03:04:20 -04:00
Adding a delete range and fixing show's editing
This commit is contained in:
parent
457dcd0db2
commit
aac1975a75
@ -98,6 +98,7 @@ namespace Kyoo.Controllers
|
|||||||
Task DeleteRange(IEnumerable<int> ids);
|
Task DeleteRange(IEnumerable<int> ids);
|
||||||
Task DeleteRange(params string[] slugs) => DeleteRange(slugs.AsEnumerable());
|
Task DeleteRange(params string[] slugs) => DeleteRange(slugs.AsEnumerable());
|
||||||
Task DeleteRange(IEnumerable<string> slugs);
|
Task DeleteRange(IEnumerable<string> slugs);
|
||||||
|
Task DeleteRange([NotNull] Expression<Func<T, bool>> where);
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IShowRepository : IRepository<Show>
|
public interface IShowRepository : IRepository<Show>
|
||||||
|
@ -182,5 +182,20 @@ namespace Kyoo.CommonApi
|
|||||||
|
|
||||||
return Ok();
|
return Ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Authorize(Policy = "Write")]
|
||||||
|
public virtual async Task<IActionResult> Delete(Dictionary<string, string> where)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await _repository.DeleteRange(ApiHelper.ParseWhere<T>(where));
|
||||||
|
}
|
||||||
|
catch (ItemNotFound)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
return Ok();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -218,7 +218,7 @@ namespace Kyoo.Controllers
|
|||||||
}
|
}
|
||||||
|
|
||||||
public abstract Task Delete(T obj);
|
public abstract Task Delete(T obj);
|
||||||
|
|
||||||
public virtual async Task DeleteRange(IEnumerable<T> objs)
|
public virtual async Task DeleteRange(IEnumerable<T> objs)
|
||||||
{
|
{
|
||||||
foreach (T obj in objs)
|
foreach (T obj in objs)
|
||||||
@ -236,5 +236,11 @@ namespace Kyoo.Controllers
|
|||||||
foreach (string slug in slugs)
|
foreach (string slug in slugs)
|
||||||
await Delete(slug);
|
await Delete(slug);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task DeleteRange(Expression<Func<T, bool>> where)
|
||||||
|
{
|
||||||
|
ICollection<T> resources = await GetAll(where);
|
||||||
|
await DeleteRange(resources);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -165,8 +165,7 @@ namespace Kyoo.Controllers
|
|||||||
|
|
||||||
if (changed.Tracks != null || resetOld)
|
if (changed.Tracks != null || resetOld)
|
||||||
{
|
{
|
||||||
ICollection<Track> oldTracks = await _tracks.GetAll(x => x.EpisodeID == resource.ID);
|
await _tracks.DeleteRange(x => x.EpisodeID == resource.ID);
|
||||||
await _tracks.DeleteRange(oldTracks);
|
|
||||||
resource.Tracks = changed.Tracks;
|
resource.Tracks = changed.Tracks;
|
||||||
await ValidateTracks(resource);
|
await ValidateTracks(resource);
|
||||||
}
|
}
|
||||||
@ -197,11 +196,13 @@ namespace Kyoo.Controllers
|
|||||||
protected override async Task Validate(Episode resource)
|
protected override async Task Validate(Episode resource)
|
||||||
{
|
{
|
||||||
await base.Validate(resource);
|
await base.Validate(resource);
|
||||||
resource.ExternalIDs = resource.ExternalIDs?.Select(x =>
|
resource.ExternalIDs = await resource.ExternalIDs.SelectAsync(async x =>
|
||||||
{
|
{
|
||||||
x.Provider = null;
|
x.Provider = await _providers.CreateIfNotExists(x.Provider, true);
|
||||||
|
x.ProviderID = x.Provider.ID;
|
||||||
|
_database.Entry(x.Provider).State = EntityState.Detached;
|
||||||
return x;
|
return x;
|
||||||
}).ToList();
|
}).ToListAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task Delete(string showSlug, int seasonNumber, int episodeNumber)
|
public async Task Delete(string showSlug, int seasonNumber, int episodeNumber)
|
||||||
|
@ -73,14 +73,15 @@ namespace Kyoo.Controllers
|
|||||||
await base.Validate(resource);
|
await base.Validate(resource);
|
||||||
await resource.ExternalIDs.ForEachAsync(async id =>
|
await resource.ExternalIDs.ForEachAsync(async id =>
|
||||||
{
|
{
|
||||||
id.ProviderID = (await _providers.CreateIfNotExists(id.Provider, true)).ID;
|
id.Provider = await _providers.CreateIfNotExists(id.Provider, true);
|
||||||
id.Provider = null;
|
id.ProviderID = id.Provider.ID;
|
||||||
|
_database.Entry(id.Provider).State = EntityState.Detached;
|
||||||
});
|
});
|
||||||
await resource.Roles.ForEachAsync(async role =>
|
await resource.Roles.ForEachAsync(async role =>
|
||||||
{
|
{
|
||||||
role.ShowID = (await _shows.Value.CreateIfNotExists(role.Show, true)).ID;
|
role.Show = await _shows.Value.CreateIfNotExists(role.Show, true);
|
||||||
role.Show = null;
|
role.ShowID = role.Show.ID;
|
||||||
|
_database.Entry(role.Show).State = EntityState.Detached;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,8 +140,9 @@ namespace Kyoo.Controllers
|
|||||||
await base.Validate(resource);
|
await base.Validate(resource);
|
||||||
await resource.ExternalIDs.ForEachAsync(async id =>
|
await resource.ExternalIDs.ForEachAsync(async id =>
|
||||||
{
|
{
|
||||||
id.ProviderID = (await _providers.CreateIfNotExists(id.Provider, true)).ID;
|
id.Provider = await _providers.CreateIfNotExists(id.Provider, true);
|
||||||
id.Provider = null;
|
id.ProviderID = id.Provider.ID;
|
||||||
|
_database.Entry(id.Provider).State = EntityState.Detached;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,7 +88,6 @@ namespace Kyoo.Controllers
|
|||||||
{
|
{
|
||||||
await base.Create(obj);
|
await base.Create(obj);
|
||||||
_database.Entry(obj).State = EntityState.Added;
|
_database.Entry(obj).State = EntityState.Added;
|
||||||
obj.GenreLinks = obj.Genres?.Select(x => Link.Create(obj, x)).ToArray();
|
|
||||||
obj.GenreLinks.ForEach(x => _database.Entry(x).State = EntityState.Added);
|
obj.GenreLinks.ForEach(x => _database.Entry(x).State = EntityState.Added);
|
||||||
obj.People.ForEach(x => _database.Entry(x).State = EntityState.Added);
|
obj.People.ForEach(x => _database.Entry(x).State = EntityState.Added);
|
||||||
obj.ExternalIDs.ForEach(x => _database.Entry(x).State = EntityState.Added);
|
obj.ExternalIDs.ForEach(x => _database.Entry(x).State = EntityState.Added);
|
||||||
@ -101,18 +100,23 @@ namespace Kyoo.Controllers
|
|||||||
await base.Validate(resource);
|
await base.Validate(resource);
|
||||||
if (resource.Studio != null)
|
if (resource.Studio != null)
|
||||||
resource.Studio = await _studios.CreateIfNotExists(resource.Studio, true);
|
resource.Studio = await _studios.CreateIfNotExists(resource.Studio, true);
|
||||||
resource.GenreLinks = await resource.Genres
|
resource.Genres = await resource.Genres
|
||||||
.SelectAsync(async x => Link.UCreate(resource, await _genres.CreateIfNotExists(x, true)))
|
.SelectAsync(x => _genres.CreateIfNotExists(x, true))
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
resource.GenreLinks = resource.Genres?
|
||||||
|
.Select(x => Link.UCreate(resource, x))
|
||||||
|
.ToList();
|
||||||
await resource.ExternalIDs.ForEachAsync(async id =>
|
await resource.ExternalIDs.ForEachAsync(async id =>
|
||||||
{
|
{
|
||||||
id.ProviderID = (await _providers.CreateIfNotExists(id.Provider, true)).ID;
|
id.Provider = await _providers.CreateIfNotExists(id.Provider, true);
|
||||||
id.Provider = null;
|
id.ProviderID = id.Provider.ID;
|
||||||
|
_database.Entry(id.Provider).State = EntityState.Detached;
|
||||||
});
|
});
|
||||||
await resource.People.ForEachAsync(async role =>
|
await resource.People.ForEachAsync(async role =>
|
||||||
{
|
{
|
||||||
role.PeopleID = (await _people.CreateIfNotExists(role.People, true)).ID;
|
role.People = await _people.CreateIfNotExists(role.People, true);
|
||||||
role.People = null;
|
role.PeopleID = role.People.ID;
|
||||||
|
_database.Entry(role.People).State = EntityState.Detached;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,7 +130,7 @@ namespace Kyoo.Controllers
|
|||||||
if (changed.Genres != null || resetOld)
|
if (changed.Genres != null || resetOld)
|
||||||
{
|
{
|
||||||
await Database.Entry(resource).Collection(x => x.GenreLinks).LoadAsync();
|
await Database.Entry(resource).Collection(x => x.GenreLinks).LoadAsync();
|
||||||
resource.GenreLinks = changed.GenreLinks;
|
resource.GenreLinks = changed.Genres?.Select(x => Link.UCreate(resource, x)).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (changed.People != null || resetOld)
|
if (changed.People != null || resetOld)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user