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(params string[] slugs) => DeleteRange(slugs.AsEnumerable());
|
||||
Task DeleteRange(IEnumerable<string> slugs);
|
||||
Task DeleteRange([NotNull] Expression<Func<T, bool>> where);
|
||||
}
|
||||
|
||||
public interface IShowRepository : IRepository<Show>
|
||||
|
@ -182,5 +182,20 @@ namespace Kyoo.CommonApi
|
||||
|
||||
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 virtual async Task DeleteRange(IEnumerable<T> objs)
|
||||
{
|
||||
foreach (T obj in objs)
|
||||
@ -236,5 +236,11 @@ namespace Kyoo.Controllers
|
||||
foreach (string slug in slugs)
|
||||
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)
|
||||
{
|
||||
ICollection<Track> oldTracks = await _tracks.GetAll(x => x.EpisodeID == resource.ID);
|
||||
await _tracks.DeleteRange(oldTracks);
|
||||
await _tracks.DeleteRange(x => x.EpisodeID == resource.ID);
|
||||
resource.Tracks = changed.Tracks;
|
||||
await ValidateTracks(resource);
|
||||
}
|
||||
@ -197,11 +196,13 @@ namespace Kyoo.Controllers
|
||||
protected override async Task Validate(Episode 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;
|
||||
}).ToList();
|
||||
}).ToListAsync();
|
||||
}
|
||||
|
||||
public async Task Delete(string showSlug, int seasonNumber, int episodeNumber)
|
||||
|
@ -73,14 +73,15 @@ namespace Kyoo.Controllers
|
||||
await base.Validate(resource);
|
||||
await resource.ExternalIDs.ForEachAsync(async id =>
|
||||
{
|
||||
id.ProviderID = (await _providers.CreateIfNotExists(id.Provider, true)).ID;
|
||||
id.Provider = null;
|
||||
|
||||
id.Provider = await _providers.CreateIfNotExists(id.Provider, true);
|
||||
id.ProviderID = id.Provider.ID;
|
||||
_database.Entry(id.Provider).State = EntityState.Detached;
|
||||
});
|
||||
await resource.Roles.ForEachAsync(async role =>
|
||||
{
|
||||
role.ShowID = (await _shows.Value.CreateIfNotExists(role.Show, true)).ID;
|
||||
role.Show = null;
|
||||
role.Show = await _shows.Value.CreateIfNotExists(role.Show, true);
|
||||
role.ShowID = role.Show.ID;
|
||||
_database.Entry(role.Show).State = EntityState.Detached;
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -140,8 +140,9 @@ namespace Kyoo.Controllers
|
||||
await base.Validate(resource);
|
||||
await resource.ExternalIDs.ForEachAsync(async id =>
|
||||
{
|
||||
id.ProviderID = (await _providers.CreateIfNotExists(id.Provider, true)).ID;
|
||||
id.Provider = null;
|
||||
id.Provider = await _providers.CreateIfNotExists(id.Provider, true);
|
||||
id.ProviderID = id.Provider.ID;
|
||||
_database.Entry(id.Provider).State = EntityState.Detached;
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -88,7 +88,6 @@ namespace Kyoo.Controllers
|
||||
{
|
||||
await base.Create(obj);
|
||||
_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.People.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);
|
||||
if (resource.Studio != null)
|
||||
resource.Studio = await _studios.CreateIfNotExists(resource.Studio, true);
|
||||
resource.GenreLinks = await resource.Genres
|
||||
.SelectAsync(async x => Link.UCreate(resource, await _genres.CreateIfNotExists(x, true)))
|
||||
resource.Genres = await resource.Genres
|
||||
.SelectAsync(x => _genres.CreateIfNotExists(x, true))
|
||||
.ToListAsync();
|
||||
resource.GenreLinks = resource.Genres?
|
||||
.Select(x => Link.UCreate(resource, x))
|
||||
.ToList();
|
||||
await resource.ExternalIDs.ForEachAsync(async id =>
|
||||
{
|
||||
id.ProviderID = (await _providers.CreateIfNotExists(id.Provider, true)).ID;
|
||||
id.Provider = null;
|
||||
id.Provider = await _providers.CreateIfNotExists(id.Provider, true);
|
||||
id.ProviderID = id.Provider.ID;
|
||||
_database.Entry(id.Provider).State = EntityState.Detached;
|
||||
});
|
||||
await resource.People.ForEachAsync(async role =>
|
||||
{
|
||||
role.PeopleID = (await _people.CreateIfNotExists(role.People, true)).ID;
|
||||
role.People = null;
|
||||
role.People = await _people.CreateIfNotExists(role.People, true);
|
||||
role.PeopleID = role.People.ID;
|
||||
_database.Entry(role.People).State = EntityState.Detached;
|
||||
});
|
||||
}
|
||||
|
||||
@ -126,7 +130,7 @@ namespace Kyoo.Controllers
|
||||
if (changed.Genres != null || resetOld)
|
||||
{
|
||||
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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user