Add from id in repository

This commit is contained in:
Zoe Roux 2023-10-27 23:33:48 +02:00
parent 49a1dad51e
commit 12f35fefc4
12 changed files with 58 additions and 37 deletions

View File

@ -94,11 +94,12 @@ namespace Kyoo.Abstractions.Controllers
Sort<T>? sortBy = default); Sort<T>? sortBy = default);
/// <summary> /// <summary>
/// Search for resources. /// Search for resources with the database.
/// </summary> /// </summary>
/// <param name="query">The query string.</param> /// <param name="query">The query string.</param>
/// <param name="include">The related fields to include.</param>
/// <returns>A list of resources found</returns> /// <returns>A list of resources found</returns>
Task<ICollection<T>> Search(string query); Task<ICollection<T>> Search(string query, Include<T>? include = default);
/// <summary> /// <summary>
/// Get every resources that match all filters /// Get every resources that match all filters
@ -120,6 +121,14 @@ namespace Kyoo.Abstractions.Controllers
/// <returns>How many resources matched that filter</returns> /// <returns>How many resources matched that filter</returns>
Task<int> GetCount(Expression<Func<T, bool>>? where = null); Task<int> GetCount(Expression<Func<T, bool>>? where = null);
/// <summary>
/// Map a list of ids to a list of items (keep the order).
/// </summary>
/// <param name="ids">The list of items id.</param>
/// <param name="include">The related fields to include.</param>
/// <returns>A list of resources mapped from ids.</returns>
Task<ICollection<T>> FromIds(IList<int> ids, Include<T>? include = default);
/// <summary> /// <summary>
/// Create a new resource. /// Create a new resource.
/// </summary> /// </summary>

View File

@ -22,6 +22,7 @@ using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Controllers;
using Kyoo.Abstractions.Models; using Kyoo.Abstractions.Models;
using Kyoo.Abstractions.Models.Utils;
using Kyoo.Postgresql; using Kyoo.Postgresql;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
@ -52,13 +53,13 @@ namespace Kyoo.Core.Controllers
} }
/// <inheritdoc /> /// <inheritdoc />
public override async Task<ICollection<Collection>> Search(string query) public override async Task<ICollection<Collection>> Search(string query, Include<Collection>? include = default)
{ {
return await Sort( return await Sort(
_database.Collections AddIncludes(_database.Collections, include)
.Where(_database.Like<Collection>(x => x.Name + " " + x.Slug, $"%{query}%")) .Where(_database.Like<Collection>(x => x.Name + " " + x.Slug, $"%{query}%"))
.Take(20) .Take(20)
).ToListAsync(); ).ToListAsync();
} }
/// <inheritdoc /> /// <inheritdoc />

View File

@ -22,6 +22,7 @@ using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Controllers;
using Kyoo.Abstractions.Models; using Kyoo.Abstractions.Models;
using Kyoo.Abstractions.Models.Utils;
using Kyoo.Postgresql; using Kyoo.Postgresql;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
@ -75,11 +76,10 @@ namespace Kyoo.Core.Controllers
} }
/// <inheritdoc /> /// <inheritdoc />
public override async Task<ICollection<Episode>> Search(string query) public override async Task<ICollection<Episode>> Search(string query, Include<Episode>? include = default)
{ {
return await Sort( return await Sort(
_database.Episodes AddIncludes(_database.Episodes, include)
.Where(x => x.EpisodeNumber != null || x.AbsoluteNumber != null)
.Where(_database.Like<Episode>(x => x.Name!, $"%{query}%")) .Where(_database.Like<Episode>(x => x.Name!, $"%{query}%"))
) )
.Take(20) .Take(20)

View File

@ -22,6 +22,7 @@ using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Controllers;
using Kyoo.Abstractions.Models; using Kyoo.Abstractions.Models;
using Kyoo.Abstractions.Models.Utils;
using Kyoo.Postgresql; using Kyoo.Postgresql;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
@ -52,11 +53,11 @@ namespace Kyoo.Core.Controllers
} }
/// <inheritdoc /> /// <inheritdoc />
public override async Task<ICollection<LibraryItem>> Search(string query) public override async Task<ICollection<LibraryItem>> Search(string query, Include<LibraryItem>? include = default)
{ {
return await Sort( return await Sort(
_database.LibraryItems AddIncludes(_database.LibraryItems, include)
.Where(_database.Like<LibraryItem>(x => x.Name, $"%{query}%")) .Where(_database.Like<LibraryItem>(x => x.Name, $"%{query}%"))
) )
.Take(20) .Take(20)
.ToListAsync(); .ToListAsync();

View File

@ -351,16 +351,20 @@ namespace Kyoo.Core.Controllers
.FirstOrDefaultAsync(where); .FirstOrDefaultAsync(where);
} }
public async Task<ICollection<T>> FromIds(IList<int> ids) /// <inheritdoc/>
public virtual async Task<ICollection<T>> FromIds(IList<int> ids, Include<T>? include = default)
{ {
return await Database.Set<T>() return (
.Where(x => ids.Contains(x.Id)) await AddIncludes(Database.Set<T>(), include)
.Where(x => ids.Contains(x.Id))
.ToListAsync()
)
.OrderBy(x => ids.IndexOf(x.Id)) .OrderBy(x => ids.IndexOf(x.Id))
.ToListAsync(); .ToList();
} }
/// <inheritdoc/> /// <inheritdoc/>
public abstract Task<ICollection<T>> Search(string query); public abstract Task<ICollection<T>> Search(string query, Include<T>? include = default);
/// <inheritdoc/> /// <inheritdoc/>
public virtual Task<ICollection<T>> GetAll(Expression<Func<T, bool>>? where = null, public virtual Task<ICollection<T>> GetAll(Expression<Func<T, bool>>? where = null,

View File

@ -21,6 +21,7 @@ using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Controllers;
using Kyoo.Abstractions.Models; using Kyoo.Abstractions.Models;
using Kyoo.Abstractions.Models.Utils;
using Kyoo.Postgresql; using Kyoo.Postgresql;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
@ -68,12 +69,11 @@ namespace Kyoo.Core.Controllers
} }
/// <inheritdoc /> /// <inheritdoc />
public override async Task<ICollection<Movie>> Search(string query) public override async Task<ICollection<Movie>> Search(string query, Include<Movie>? include = default)
{ {
query = $"%{query}%";
return await Sort( return await Sort(
_database.Movies AddIncludes(_database.Movies, include)
.Where(_database.Like<Movie>(x => x.Name + " " + x.Slug, query)) .Where(_database.Like<Movie>(x => x.Name + " " + x.Slug, $"%{query}%"))
) )
.Take(20) .Take(20)
.ToListAsync(); .ToListAsync();

View File

@ -21,6 +21,7 @@ using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Controllers;
using Kyoo.Abstractions.Models; using Kyoo.Abstractions.Models;
using Kyoo.Abstractions.Models.Utils;
using Kyoo.Postgresql; using Kyoo.Postgresql;
namespace Kyoo.Core.Controllers namespace Kyoo.Core.Controllers
@ -38,7 +39,7 @@ namespace Kyoo.Core.Controllers
{ } { }
/// <inheritdoc /> /// <inheritdoc />
public override Task<ICollection<News>> Search(string query) public override Task<ICollection<News>> Search(string query, Include<News>? include = default)
=> throw new InvalidOperationException(); => throw new InvalidOperationException();
/// <inheritdoc /> /// <inheritdoc />

View File

@ -23,6 +23,7 @@ using System.Linq.Expressions;
using System.Threading.Tasks; using System.Threading.Tasks;
using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Controllers;
using Kyoo.Abstractions.Models; using Kyoo.Abstractions.Models;
using Kyoo.Abstractions.Models.Utils;
using Kyoo.Postgresql; using Kyoo.Postgresql;
using Kyoo.Utils; using Kyoo.Utils;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
@ -63,10 +64,10 @@ namespace Kyoo.Core.Controllers
} }
/// <inheritdoc /> /// <inheritdoc />
public override async Task<ICollection<People>> Search(string query) public override async Task<ICollection<People>> Search(string query, Include<People>? include = default)
{ {
return await Sort( return await Sort(
_database.People AddIncludes(_database.People, include)
.Where(_database.Like<People>(x => x.Name, $"%{query}%")) .Where(_database.Like<People>(x => x.Name, $"%{query}%"))
) )
.Take(20) .Take(20)

View File

@ -23,6 +23,7 @@ using System.Threading.Tasks;
using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Controllers;
using Kyoo.Abstractions.Models; using Kyoo.Abstractions.Models;
using Kyoo.Abstractions.Models.Exceptions; using Kyoo.Abstractions.Models.Exceptions;
using Kyoo.Abstractions.Models.Utils;
using Kyoo.Postgresql; using Kyoo.Postgresql;
using Kyoo.Utils; using Kyoo.Utils;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
@ -69,11 +70,11 @@ namespace Kyoo.Core.Controllers
} }
/// <inheritdoc/> /// <inheritdoc/>
public override async Task<ICollection<Season>> Search(string query) public override async Task<ICollection<Season>> Search(string query, Include<Season>? include = default)
{ {
return await Sort( return await Sort(
_database.Seasons AddIncludes(_database.Seasons, include)
.Where(_database.Like<Season>(x => x.Name!, $"%{query}%")) .Where(_database.Like<Season>(x => x.Name!, $"%{query}%"))
) )
.Take(20) .Take(20)
.ToListAsync(); .ToListAsync();

View File

@ -21,6 +21,7 @@ using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Controllers;
using Kyoo.Abstractions.Models; using Kyoo.Abstractions.Models;
using Kyoo.Abstractions.Models.Utils;
using Kyoo.Postgresql; using Kyoo.Postgresql;
using Kyoo.Utils; using Kyoo.Utils;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
@ -69,11 +70,11 @@ namespace Kyoo.Core.Controllers
} }
/// <inheritdoc /> /// <inheritdoc />
public override async Task<ICollection<Show>> Search(string query) public override async Task<ICollection<Show>> Search(string query, Include<Show>? include = default)
{ {
return await Sort( return await Sort(
_database.Shows AddIncludes(_database.Shows, include)
.Where(_database.Like<Show>(x => x.Name + " " + x.Slug, $"%{query}%")) .Where(_database.Like<Show>(x => x.Name + " " + x.Slug, $"%{query}%"))
) )
.Take(20) .Take(20)
.ToListAsync(); .ToListAsync();

View File

@ -21,6 +21,7 @@ using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Controllers;
using Kyoo.Abstractions.Models; using Kyoo.Abstractions.Models;
using Kyoo.Abstractions.Models.Utils;
using Kyoo.Postgresql; using Kyoo.Postgresql;
using Kyoo.Utils; using Kyoo.Utils;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
@ -52,11 +53,11 @@ namespace Kyoo.Core.Controllers
} }
/// <inheritdoc /> /// <inheritdoc />
public override async Task<ICollection<Studio>> Search(string query) public override async Task<ICollection<Studio>> Search(string query, Include<Studio>? include = default)
{ {
return await Sort( return await Sort(
_database.Studios AddIncludes(_database.Studios, include)
.Where(_database.Like<Studio>(x => x.Name, $"%{query}%")) .Where(_database.Like<Studio>(x => x.Name, $"%{query}%"))
) )
.Take(20) .Take(20)
.ToListAsync(); .ToListAsync();

View File

@ -21,6 +21,7 @@ using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Controllers;
using Kyoo.Abstractions.Models; using Kyoo.Abstractions.Models;
using Kyoo.Abstractions.Models.Utils;
using Kyoo.Postgresql; using Kyoo.Postgresql;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
@ -51,11 +52,11 @@ namespace Kyoo.Core.Controllers
} }
/// <inheritdoc /> /// <inheritdoc />
public override async Task<ICollection<User>> Search(string query) public override async Task<ICollection<User>> Search(string query, Include<User>? include = default)
{ {
return await Sort( return await Sort(
_database.Users AddIncludes(_database.Users, include)
.Where(_database.Like<User>(x => x.Username, $"%{query}%")) .Where(_database.Like<User>(x => x.Username, $"%{query}%"))
) )
.Take(20) .Take(20)
.ToListAsync(); .ToListAsync();