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})); 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] [Fact]
public async Task EditStudioTest() public async Task EditStudioTest()
{ {

View File

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