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> <Company>SDG</Company>
<PackageLicenseExpression>GPL-3.0-or-later</PackageLicenseExpression> <PackageLicenseExpression>GPL-3.0-or-later</PackageLicenseExpression>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance> <PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<PackageVersion>1.0.20</PackageVersion> <PackageVersion>1.0.21</PackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View File

@ -66,7 +66,10 @@ namespace Kyoo.Controllers
throw new ArgumentNullException(nameof(obj)); throw new ArgumentNullException(nameof(obj));
await Validate(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(); await _database.SaveChangesAsync();
return obj.ID; return obj.ID;
} }

View File

@ -49,9 +49,11 @@ namespace Kyoo.Controllers
if (obj == null) if (obj == null)
throw new ArgumentNullException(nameof(obj)); throw new ArgumentNullException(nameof(obj));
obj.Links = null;
await Validate(obj); await Validate(obj);
_database.Entry(obj).State = EntityState.Added; _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(); await _database.SaveChangesAsync();
return obj.ID; return obj.ID;
} }

View File

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

View File

@ -60,12 +60,12 @@ namespace Kyoo.Controllers
{ {
if (obj == null) if (obj == null)
throw new ArgumentNullException(nameof(obj)); throw new ArgumentNullException(nameof(obj));
obj.Show = null;
obj.Episodes = null;
await Validate(obj);
await _database.Seasons.AddAsync(obj); await Validate(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(); await _database.SaveChangesAsync();
return obj.ID; return obj.ID;
} }

View File

@ -37,7 +37,10 @@ namespace Kyoo.Api
[Authorize(Policy="Read")] [Authorize(Policy="Read")]
public IEnumerable<Show> GetShows() 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}")] [HttpGet("{slug}")]