mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-09 03:04:20 -04:00
Solving bugs with related entities in repositories
This commit is contained in:
parent
2d77ca992b
commit
e7a3cfc2cc
@ -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>
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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}")]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user