diff --git a/back/src/Kyoo.Abstractions/Controllers/IRepository.cs b/back/src/Kyoo.Abstractions/Controllers/IRepository.cs index a13fcd10..c9fab9bf 100644 --- a/back/src/Kyoo.Abstractions/Controllers/IRepository.cs +++ b/back/src/Kyoo.Abstractions/Controllers/IRepository.cs @@ -94,11 +94,12 @@ namespace Kyoo.Abstractions.Controllers Sort? sortBy = default); /// - /// Search for resources. + /// Search for resources with the database. /// /// The query string. + /// The related fields to include. /// A list of resources found - Task> Search(string query); + Task> Search(string query, Include? include = default); /// /// Get every resources that match all filters @@ -120,6 +121,14 @@ namespace Kyoo.Abstractions.Controllers /// How many resources matched that filter Task GetCount(Expression>? where = null); + /// + /// Map a list of ids to a list of items (keep the order). + /// + /// The list of items id. + /// The related fields to include. + /// A list of resources mapped from ids. + Task> FromIds(IList ids, Include? include = default); + /// /// Create a new resource. /// diff --git a/back/src/Kyoo.Core/Controllers/Repositories/CollectionRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/CollectionRepository.cs index d553ed61..d054bb53 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/CollectionRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/CollectionRepository.cs @@ -22,6 +22,7 @@ using System.Linq; using System.Threading.Tasks; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models; +using Kyoo.Abstractions.Models.Utils; using Kyoo.Postgresql; using Microsoft.EntityFrameworkCore; @@ -52,13 +53,13 @@ namespace Kyoo.Core.Controllers } /// - public override async Task> Search(string query) + public override async Task> Search(string query, Include? include = default) { return await Sort( - _database.Collections - .Where(_database.Like(x => x.Name + " " + x.Slug, $"%{query}%")) - .Take(20) - ).ToListAsync(); + AddIncludes(_database.Collections, include) + .Where(_database.Like(x => x.Name + " " + x.Slug, $"%{query}%")) + .Take(20) + ).ToListAsync(); } /// diff --git a/back/src/Kyoo.Core/Controllers/Repositories/EpisodeRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/EpisodeRepository.cs index 94342047..58c4d3a6 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/EpisodeRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/EpisodeRepository.cs @@ -22,6 +22,7 @@ using System.Linq; using System.Threading.Tasks; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models; +using Kyoo.Abstractions.Models.Utils; using Kyoo.Postgresql; using Microsoft.EntityFrameworkCore; @@ -75,11 +76,10 @@ namespace Kyoo.Core.Controllers } /// - public override async Task> Search(string query) + public override async Task> Search(string query, Include? include = default) { return await Sort( - _database.Episodes - .Where(x => x.EpisodeNumber != null || x.AbsoluteNumber != null) + AddIncludes(_database.Episodes, include) .Where(_database.Like(x => x.Name!, $"%{query}%")) ) .Take(20) diff --git a/back/src/Kyoo.Core/Controllers/Repositories/LibraryItemRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/LibraryItemRepository.cs index 43829c9f..09bf6432 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/LibraryItemRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/LibraryItemRepository.cs @@ -22,6 +22,7 @@ using System.Linq; using System.Threading.Tasks; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models; +using Kyoo.Abstractions.Models.Utils; using Kyoo.Postgresql; using Microsoft.EntityFrameworkCore; @@ -52,11 +53,11 @@ namespace Kyoo.Core.Controllers } /// - public override async Task> Search(string query) + public override async Task> Search(string query, Include? include = default) { return await Sort( - _database.LibraryItems - .Where(_database.Like(x => x.Name, $"%{query}%")) + AddIncludes(_database.LibraryItems, include) + .Where(_database.Like(x => x.Name, $"%{query}%")) ) .Take(20) .ToListAsync(); diff --git a/back/src/Kyoo.Core/Controllers/Repositories/LocalRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/LocalRepository.cs index af38fe29..525b4003 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/LocalRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/LocalRepository.cs @@ -351,16 +351,20 @@ namespace Kyoo.Core.Controllers .FirstOrDefaultAsync(where); } - public async Task> FromIds(IList ids) + /// + public virtual async Task> FromIds(IList ids, Include? include = default) { - return await Database.Set() - .Where(x => ids.Contains(x.Id)) + return ( + await AddIncludes(Database.Set(), include) + .Where(x => ids.Contains(x.Id)) + .ToListAsync() + ) .OrderBy(x => ids.IndexOf(x.Id)) - .ToListAsync(); + .ToList(); } /// - public abstract Task> Search(string query); + public abstract Task> Search(string query, Include? include = default); /// public virtual Task> GetAll(Expression>? where = null, diff --git a/back/src/Kyoo.Core/Controllers/Repositories/MovieRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/MovieRepository.cs index c3bf697c..f1fa3e26 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/MovieRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/MovieRepository.cs @@ -21,6 +21,7 @@ using System.Linq; using System.Threading.Tasks; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models; +using Kyoo.Abstractions.Models.Utils; using Kyoo.Postgresql; using Microsoft.EntityFrameworkCore; @@ -68,12 +69,11 @@ namespace Kyoo.Core.Controllers } /// - public override async Task> Search(string query) + public override async Task> Search(string query, Include? include = default) { - query = $"%{query}%"; return await Sort( - _database.Movies - .Where(_database.Like(x => x.Name + " " + x.Slug, query)) + AddIncludes(_database.Movies, include) + .Where(_database.Like(x => x.Name + " " + x.Slug, $"%{query}%")) ) .Take(20) .ToListAsync(); diff --git a/back/src/Kyoo.Core/Controllers/Repositories/NewsRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/NewsRepository.cs index 3a005094..c66c6f24 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/NewsRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/NewsRepository.cs @@ -21,6 +21,7 @@ using System.Collections.Generic; using System.Threading.Tasks; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models; +using Kyoo.Abstractions.Models.Utils; using Kyoo.Postgresql; namespace Kyoo.Core.Controllers @@ -38,7 +39,7 @@ namespace Kyoo.Core.Controllers { } /// - public override Task> Search(string query) + public override Task> Search(string query, Include? include = default) => throw new InvalidOperationException(); /// diff --git a/back/src/Kyoo.Core/Controllers/Repositories/PeopleRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/PeopleRepository.cs index 25a4e2e5..ecadd8e0 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/PeopleRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/PeopleRepository.cs @@ -23,6 +23,7 @@ using System.Linq.Expressions; using System.Threading.Tasks; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models; +using Kyoo.Abstractions.Models.Utils; using Kyoo.Postgresql; using Kyoo.Utils; using Microsoft.EntityFrameworkCore; @@ -63,10 +64,10 @@ namespace Kyoo.Core.Controllers } /// - public override async Task> Search(string query) + public override async Task> Search(string query, Include? include = default) { return await Sort( - _database.People + AddIncludes(_database.People, include) .Where(_database.Like(x => x.Name, $"%{query}%")) ) .Take(20) diff --git a/back/src/Kyoo.Core/Controllers/Repositories/SeasonRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/SeasonRepository.cs index 9025853a..cb1ed67b 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/SeasonRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/SeasonRepository.cs @@ -23,6 +23,7 @@ using System.Threading.Tasks; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models; using Kyoo.Abstractions.Models.Exceptions; +using Kyoo.Abstractions.Models.Utils; using Kyoo.Postgresql; using Kyoo.Utils; using Microsoft.EntityFrameworkCore; @@ -69,11 +70,11 @@ namespace Kyoo.Core.Controllers } /// - public override async Task> Search(string query) + public override async Task> Search(string query, Include? include = default) { return await Sort( - _database.Seasons - .Where(_database.Like(x => x.Name!, $"%{query}%")) + AddIncludes(_database.Seasons, include) + .Where(_database.Like(x => x.Name!, $"%{query}%")) ) .Take(20) .ToListAsync(); diff --git a/back/src/Kyoo.Core/Controllers/Repositories/ShowRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/ShowRepository.cs index 367174ee..5f00c076 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/ShowRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/ShowRepository.cs @@ -21,6 +21,7 @@ using System.Linq; using System.Threading.Tasks; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models; +using Kyoo.Abstractions.Models.Utils; using Kyoo.Postgresql; using Kyoo.Utils; using Microsoft.EntityFrameworkCore; @@ -69,11 +70,11 @@ namespace Kyoo.Core.Controllers } /// - public override async Task> Search(string query) + public override async Task> Search(string query, Include? include = default) { return await Sort( - _database.Shows - .Where(_database.Like(x => x.Name + " " + x.Slug, $"%{query}%")) + AddIncludes(_database.Shows, include) + .Where(_database.Like(x => x.Name + " " + x.Slug, $"%{query}%")) ) .Take(20) .ToListAsync(); diff --git a/back/src/Kyoo.Core/Controllers/Repositories/StudioRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/StudioRepository.cs index 1153d9be..6ca571aa 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/StudioRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/StudioRepository.cs @@ -21,6 +21,7 @@ using System.Linq; using System.Threading.Tasks; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models; +using Kyoo.Abstractions.Models.Utils; using Kyoo.Postgresql; using Kyoo.Utils; using Microsoft.EntityFrameworkCore; @@ -52,11 +53,11 @@ namespace Kyoo.Core.Controllers } /// - public override async Task> Search(string query) + public override async Task> Search(string query, Include? include = default) { return await Sort( - _database.Studios - .Where(_database.Like(x => x.Name, $"%{query}%")) + AddIncludes(_database.Studios, include) + .Where(_database.Like(x => x.Name, $"%{query}%")) ) .Take(20) .ToListAsync(); diff --git a/back/src/Kyoo.Core/Controllers/Repositories/UserRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/UserRepository.cs index 4efaf09f..d07753ec 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/UserRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/UserRepository.cs @@ -21,6 +21,7 @@ using System.Linq; using System.Threading.Tasks; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models; +using Kyoo.Abstractions.Models.Utils; using Kyoo.Postgresql; using Microsoft.EntityFrameworkCore; @@ -51,11 +52,11 @@ namespace Kyoo.Core.Controllers } /// - public override async Task> Search(string query) + public override async Task> Search(string query, Include? include = default) { return await Sort( - _database.Users - .Where(_database.Like(x => x.Username, $"%{query}%")) + AddIncludes(_database.Users, include) + .Where(_database.Like(x => x.Username, $"%{query}%")) ) .Take(20) .ToListAsync();