Finishing to rework repositories

This commit is contained in:
Zoe Roux 2020-08-16 01:11:29 +02:00
parent 76e28d6ac2
commit a258e89080
11 changed files with 26 additions and 31 deletions

View File

@ -96,7 +96,7 @@ namespace Kyoo.Controllers
return await query.ToListAsync(); return await query.ToListAsync();
} }
public abstract Task<T> Create(T obj); public abstract Task<T> Create([NotNull] T obj);
public virtual async Task<T> CreateIfNotExists(T obj) public virtual async Task<T> CreateIfNotExists(T obj)
{ {

View File

@ -10,11 +10,11 @@ using Microsoft.Extensions.DependencyInjection;
namespace Kyoo.Controllers namespace Kyoo.Controllers
{ {
public class GenreRepository : LocalRepository<Genre>, IGenreRepository public class GenreRepository : LocalRepository<Genre, GenreDE>, IGenreRepository
{ {
private readonly DatabaseContext _database; private readonly DatabaseContext _database;
private readonly Lazy<IShowRepository> _shows; private readonly Lazy<IShowRepository> _shows;
protected override Expression<Func<Genre, object>> DefaultSort => x => x.Slug; protected override Expression<Func<GenreDE, object>> DefaultSort => x => x.Slug;
public GenreRepository(DatabaseContext database, IServiceProvider services) : base(database) public GenreRepository(DatabaseContext database, IServiceProvider services) : base(database)
@ -42,10 +42,10 @@ namespace Kyoo.Controllers
return await _database.Genres return await _database.Genres
.Where(genre => EF.Functions.ILike(genre.Name, $"%{query}%")) .Where(genre => EF.Functions.ILike(genre.Name, $"%{query}%"))
.Take(20) .Take(20)
.ToListAsync(); .ToListAsync<Genre>();
} }
public override async Task<Genre> Create(Genre obj) public override async Task<GenreDE> Create(GenreDE obj)
{ {
if (obj == null) if (obj == null)
throw new ArgumentNullException(nameof(obj)); throw new ArgumentNullException(nameof(obj));
@ -55,7 +55,7 @@ namespace Kyoo.Controllers
return obj; return obj;
} }
public override async Task Delete(Genre obj) public override async Task Delete(GenreDE obj)
{ {
if (obj == null) if (obj == null)
throw new ArgumentNullException(nameof(obj)); throw new ArgumentNullException(nameof(obj));
@ -73,7 +73,7 @@ namespace Kyoo.Controllers
Pagination limit = default) Pagination limit = default)
{ {
ICollection<Genre> genres = await ApplyFilters(_database.GenreLinks.Where(x => x.ShowID == showID) ICollection<Genre> genres = await ApplyFilters(_database.GenreLinks.Where(x => x.ShowID == showID)
.Select(x => x.Genre), .Select(x => x.Genre as GenreDE),
where, where,
sort, sort,
limit); limit);
@ -89,7 +89,7 @@ namespace Kyoo.Controllers
{ {
ICollection<Genre> genres = await ApplyFilters(_database.GenreLinks ICollection<Genre> genres = await ApplyFilters(_database.GenreLinks
.Where(x => x.Show.Slug == showSlug) .Where(x => x.Show.Slug == showSlug)
.Select(x => x.Genre), .Select(x => x.Genre as GenreDE),
where, where,
sort, sort,
limit); limit);

View File

@ -76,7 +76,7 @@ namespace Kyoo.Controllers
return ApplyFilters(ItemsQuery, where, sort, limit); return ApplyFilters(ItemsQuery, where, sort, limit);
} }
public override async Task<ICollection<LibraryItem>> Search(string query) public async Task<ICollection<LibraryItem>> Search(string query)
{ {
return await ItemsQuery return await ItemsQuery
.Where(x => EF.Functions.ILike(x.Title, $"%{query}%")) .Where(x => EF.Functions.ILike(x.Title, $"%{query}%"))

View File

@ -50,11 +50,10 @@ namespace Kyoo.Controllers
.ToListAsync<Library>(); .ToListAsync<Library>();
} }
public override async Task<Library> Create(Library item) public override async Task<LibraryDE> Create(LibraryDE obj)
{ {
if (item == null) if (obj == null)
throw new ArgumentNullException(nameof(item)); throw new ArgumentNullException(nameof(obj));
LibraryDE obj = new LibraryDE(item);
await Validate(obj); await Validate(obj);
_database.Entry(obj).State = EntityState.Added; _database.Entry(obj).State = EntityState.Added;
@ -82,11 +81,10 @@ namespace Kyoo.Controllers
link.Provider = await _providers.CreateIfNotExists(link.Provider); link.Provider = await _providers.CreateIfNotExists(link.Provider);
} }
public override async Task Delete(Library item) public override async Task Delete(LibraryDE obj)
{ {
if (item == null) if (obj == null)
throw new ArgumentNullException(nameof(item)); throw new ArgumentNullException(nameof(obj));
LibraryDE obj = new LibraryDE(item);
_database.Entry(obj).State = EntityState.Deleted; _database.Entry(obj).State = EntityState.Deleted;
if (obj.ProviderLinks != null) if (obj.ProviderLinks != null)

View File

@ -42,7 +42,7 @@ namespace Kyoo.Controllers
await _shows.Value.DisposeAsync(); await _shows.Value.DisposeAsync();
} }
public override async Task<ICollection<People>> Search(string query) public async Task<ICollection<People>> Search(string query)
{ {
return await _database.People return await _database.People
.Where(people => EF.Functions.ILike(people.Name, $"%{query}%")) .Where(people => EF.Functions.ILike(people.Name, $"%{query}%"))

View File

@ -4,7 +4,6 @@ using System.Linq;
using System.Linq.Expressions; using System.Linq.Expressions;
using System.Threading.Tasks; using System.Threading.Tasks;
using Kyoo.Models; using Kyoo.Models;
using Kyoo.Models.Exceptions;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
namespace Kyoo.Controllers namespace Kyoo.Controllers
@ -20,7 +19,7 @@ namespace Kyoo.Controllers
_database = database; _database = database;
} }
public override async Task<ICollection<ProviderID>> Search(string query) public async Task<ICollection<ProviderID>> Search(string query)
{ {
return await _database.Providers return await _database.Providers
.Where(x => EF.Functions.ILike(x.Name, $"%{query}%")) .Where(x => EF.Functions.ILike(x.Name, $"%{query}%"))

View File

@ -70,7 +70,7 @@ namespace Kyoo.Controllers
&& x.SeasonNumber == seasonNumber); && x.SeasonNumber == seasonNumber);
} }
public override async Task<ICollection<Season>> Search(string query) public async Task<ICollection<Season>> Search(string query)
{ {
return await _database.Seasons return await _database.Seasons
.Where(x => EF.Functions.ILike(x.Title, $"%{query}%")) .Where(x => EF.Functions.ILike(x.Title, $"%{query}%"))

View File

@ -86,11 +86,10 @@ namespace Kyoo.Controllers
.ToListAsync<Show>(); .ToListAsync<Show>();
} }
public override async Task<Show> Create(Show item) public override async Task<ShowDE> Create(ShowDE obj)
{ {
if (item == null) if (obj == null)
throw new ArgumentNullException(nameof(item)); throw new ArgumentNullException(nameof(obj));
ShowDE obj = new ShowDE(item);
await Validate(obj); await Validate(obj);
_database.Entry(obj).State = EntityState.Added; _database.Entry(obj).State = EntityState.Added;
@ -148,11 +147,10 @@ namespace Kyoo.Controllers
} }
} }
public override async Task Delete(Show item) public override async Task Delete(ShowDE obj)
{ {
if (item == null) if (obj == null)
throw new ArgumentNullException(nameof(item)); throw new ArgumentNullException(nameof(obj));
ShowDE obj = new ShowDE(item);
_database.Entry(obj).State = EntityState.Deleted; _database.Entry(obj).State = EntityState.Deleted;

View File

@ -20,7 +20,7 @@ namespace Kyoo.Controllers
_database = database; _database = database;
} }
public override async Task<ICollection<Studio>> Search(string query) public async Task<ICollection<Studio>> Search(string query)
{ {
return await _database.Studios return await _database.Studios
.Where(x => EF.Functions.ILike(x.Name, $"%{query}%")) .Where(x => EF.Functions.ILike(x.Name, $"%{query}%"))

View File

@ -61,7 +61,7 @@ namespace Kyoo.Controllers
&& x.Language == language && x.Language == language
&& x.IsForced == forced); && x.IsForced == forced);
} }
public override Task<ICollection<Track>> Search(string query) public Task<ICollection<Track>> Search(string query)
{ {
throw new InvalidOperationException("Tracks do not support the search method."); throw new InvalidOperationException("Tracks do not support the search method.");
} }