ShowRepository: Fixing relation adding

This commit is contained in:
Zoe Roux 2021-07-31 23:16:36 +02:00
parent 181eb5ba2e
commit c0b83d2d58
2 changed files with 40 additions and 14 deletions

View File

@ -74,6 +74,26 @@ namespace Kyoo.Tests.Database
Assert.Equal(value.Genres.Select(x => new{x.Slug, x.Name}), show.Genres.Select(x => new{x.Slug, x.Name}));
}
[Fact]
public async Task AddGenreTest()
{
Show value = await _repository.Get(TestSample.Get<Show>().Slug);
await Repositories.LibraryManager.Load(value, x => x.Genres);
value.Genres.Add(new Genre("test"));
Show edited = await _repository.Edit(value, false);
Assert.Equal(value.Slug, edited.Slug);
Assert.Equal(value.Genres.Select(x => new{x.Slug, x.Name}), edited.Genres.Select(x => new{x.Slug, x.Name}));
await using DatabaseContext database = Repositories.Context.New();
Show show = await database.Shows
.Include(x => x.Genres)
.FirstAsync();
Assert.Equal(value.Slug, show.Slug);
Assert.Equal(value.Genres.Select(x => new{x.Slug, x.Name}), show.Genres.Select(x => new{x.Slug, x.Name}));
}
[Fact]
public async Task EditStudioTest()
{

View File

@ -76,10 +76,6 @@ namespace Kyoo.Controllers
{
await base.Create(obj);
_database.Entry(obj).State = EntityState.Added;
if (obj.Genres != null)
_database.AttachRange(obj.Genres);
obj.People.ForEach(x => _database.Entry(x).State = EntityState.Added);
obj.ExternalIDs.ForEach(x => _database.MetadataIds<Show>().Attach(x));
await _database.SaveChangesAsync($"Trying to insert a duplicated show (slug {obj.Slug} already exists).");
return obj;
}
@ -99,20 +95,30 @@ namespace Kyoo.Controllers
resource.Genres = await resource.Genres
.SelectAsync(x => _genres.CreateIfNotExists(x))
.ToListAsync();
_database.AttachRange(resource.Genres);
}
await resource.ExternalIDs.ForEachAsync(async id =>
if (resource.ExternalIDs != null)
{
id.Provider = await _providers.CreateIfNotExists(id.Provider);
id.ProviderID = id.Provider.ID;
_database.Entry(id.Provider).State = EntityState.Detached;
});
await resource.People.ForEachAsync(async role =>
foreach (MetadataID id in resource.ExternalIDs)
{
id.Provider = await _providers.CreateIfNotExists(id.Provider);
id.ProviderID = id.Provider.ID;
_database.Entry(id.Provider).State = EntityState.Detached;
}
_database.MetadataIds<Show>().AttachRange(resource.ExternalIDs);
}
if (resource.People != null)
{
role.People = await _people.CreateIfNotExists(role.People);
role.PeopleID = role.People.ID;
_database.Entry(role.People).State = EntityState.Detached;
});
foreach (PeopleRole role in resource.People)
{
role.People = await _people.CreateIfNotExists(role.People);
role.PeopleID = role.People.ID;
_database.Entry(role.People).State = EntityState.Detached;
_database.Entry(role).State = EntityState.Added;
}
}
}
/// <inheritdoc />