Solving bugs with related entities in repositories

This commit is contained in:
Zoe Roux 2020-06-07 19:31:45 +02:00
parent 2d77ca992b
commit e7a3cfc2cc
6 changed files with 29 additions and 16 deletions

View File

@ -11,7 +11,7 @@
<Company>SDG</Company>
<PackageLicenseExpression>GPL-3.0-or-later</PackageLicenseExpression>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<PackageVersion>1.0.20</PackageVersion>
<PackageVersion>1.0.21</PackageVersion>
</PropertyGroup>
<ItemGroup>

View File

@ -66,7 +66,10 @@ namespace Kyoo.Controllers
throw new ArgumentNullException(nameof(obj));
await Validate(obj);
await _database.Episodes.AddAsync(obj);
_database.Entry(obj).State = EntityState.Added;
if (obj.ExternalIDs != null)
foreach (MetadataID entry in obj.ExternalIDs)
_database.Entry(entry).State = EntityState.Added;
await _database.SaveChangesAsync();
return obj.ID;
}

View File

@ -49,9 +49,11 @@ namespace Kyoo.Controllers
if (obj == null)
throw new ArgumentNullException(nameof(obj));
obj.Links = null;
await Validate(obj);
_database.Entry(obj).State = EntityState.Added;
if (obj.ProviderLinks != null)
foreach (ProviderLink entry in obj.ProviderLinks)
_database.Entry(entry).State = EntityState.Added;
await _database.SaveChangesAsync();
return obj.ID;
}

View File

@ -5,18 +5,19 @@ using System.Threading.Tasks;
using Kyoo.Models;
using Kyoo.Models.Exceptions;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
namespace Kyoo.Controllers
{
public class PeopleRepository : IPeopleRepository
{
private readonly DatabaseContext _database;
private readonly IProviderRepository _providers;
private readonly IServiceProvider _serviceProvider;
public PeopleRepository(DatabaseContext database, IProviderRepository providers)
public PeopleRepository(DatabaseContext database, IServiceProvider serviceProvider)
{
_database = database;
_providers = providers;
_serviceProvider = serviceProvider;
}
public Task<People> Get(int id)
@ -48,9 +49,10 @@ namespace Kyoo.Controllers
throw new ArgumentNullException(nameof(obj));
await Validate(obj);
obj.Roles = null;
await _database.Peoples.AddAsync(obj);
_database.Entry(obj).State = EntityState.Added;
if (obj.ExternalIDs != null)
foreach (MetadataID entry in obj.ExternalIDs)
_database.Entry(entry).State = EntityState.Added;
await _database.SaveChangesAsync();
return obj.ID;
}
@ -87,7 +89,10 @@ namespace Kyoo.Controllers
{
obj.ExternalIDs = (await Task.WhenAll(obj.ExternalIDs.Select(async x =>
{
x.ProviderID = await _providers.CreateIfNotExists(x.Provider);
using IServiceScope serviceScope = _serviceProvider.CreateScope();
IProviderRepository providers = serviceScope.ServiceProvider.GetService<IProviderRepository>();
x.ProviderID = await providers.CreateIfNotExists(x.Provider);
return x;
}))).ToList();
}

View File

@ -61,11 +61,11 @@ namespace Kyoo.Controllers
if (obj == null)
throw new ArgumentNullException(nameof(obj));
obj.Show = null;
obj.Episodes = null;
await Validate(obj);
await _database.Seasons.AddAsync(obj);
_database.Entry(obj).State = EntityState.Added;
if (obj.ExternalIDs != null)
foreach (MetadataID entry in obj.ExternalIDs)
_database.Entry(entry).State = EntityState.Added;
await _database.SaveChangesAsync();
return obj.ID;
}

View File

@ -37,7 +37,10 @@ namespace Kyoo.Api
[Authorize(Policy="Read")]
public IEnumerable<Show> GetShows()
{
return _database.LibraryLinks.AsEnumerable().Select(x => x.Show ?? x.Collection.AsShow());
return _database.LibraryLinks
.Include(x => x.Show)
.Include(x => x.Collection)
.AsEnumerable().Select(x => x.Show ?? x.Collection.AsShow()).ToList();
}
[HttpGet("{slug}")]