mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-05-31 20:24:27 -04:00
Add filter support to collections, movies, and shows search endpoints
This commit is contained in:
parent
9b8fb7596f
commit
7725d2534b
@ -54,6 +54,7 @@ public interface ISearchManager
|
|||||||
public Task<SearchPage<Movie>.SearchResult> SearchMovies(
|
public Task<SearchPage<Movie>.SearchResult> SearchMovies(
|
||||||
string? query,
|
string? query,
|
||||||
Sort<Movie> sortBy,
|
Sort<Movie> sortBy,
|
||||||
|
Filter<ILibraryItem>? filter,
|
||||||
SearchPagination pagination,
|
SearchPagination pagination,
|
||||||
Include<Movie>? include = default
|
Include<Movie>? include = default
|
||||||
);
|
);
|
||||||
@ -69,6 +70,7 @@ public interface ISearchManager
|
|||||||
public Task<SearchPage<Show>.SearchResult> SearchShows(
|
public Task<SearchPage<Show>.SearchResult> SearchShows(
|
||||||
string? query,
|
string? query,
|
||||||
Sort<Show> sortBy,
|
Sort<Show> sortBy,
|
||||||
|
Filter<ILibraryItem>? filter,
|
||||||
SearchPagination pagination,
|
SearchPagination pagination,
|
||||||
Include<Show>? include = default
|
Include<Show>? include = default
|
||||||
);
|
);
|
||||||
@ -84,6 +86,7 @@ public interface ISearchManager
|
|||||||
public Task<SearchPage<Collection>.SearchResult> SearchCollections(
|
public Task<SearchPage<Collection>.SearchResult> SearchCollections(
|
||||||
string? query,
|
string? query,
|
||||||
Sort<Collection> sortBy,
|
Sort<Collection> sortBy,
|
||||||
|
Filter<ILibraryItem>? filter,
|
||||||
SearchPagination pagination,
|
SearchPagination pagination,
|
||||||
Include<Collection>? include = default
|
Include<Collection>? include = default
|
||||||
);
|
);
|
||||||
|
@ -65,11 +65,12 @@ public class SearchApi : BaseApi
|
|||||||
public async Task<SearchPage<Collection>> SearchCollections(
|
public async Task<SearchPage<Collection>> SearchCollections(
|
||||||
[FromQuery] string? q,
|
[FromQuery] string? q,
|
||||||
[FromQuery] Sort<Collection> sortBy,
|
[FromQuery] Sort<Collection> sortBy,
|
||||||
|
[FromQuery] Filter<ILibraryItem>? filter,
|
||||||
[FromQuery] SearchPagination pagination,
|
[FromQuery] SearchPagination pagination,
|
||||||
[FromQuery] Include<Collection> fields
|
[FromQuery] Include<Collection> fields
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return SearchPage(await _searchManager.SearchCollections(q, sortBy, pagination, fields));
|
return SearchPage(await _searchManager.SearchCollections(q, sortBy, filter, pagination, fields));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -91,11 +92,12 @@ public class SearchApi : BaseApi
|
|||||||
public async Task<SearchPage<Show>> SearchShows(
|
public async Task<SearchPage<Show>> SearchShows(
|
||||||
[FromQuery] string? q,
|
[FromQuery] string? q,
|
||||||
[FromQuery] Sort<Show> sortBy,
|
[FromQuery] Sort<Show> sortBy,
|
||||||
|
[FromQuery] Filter<ILibraryItem>? filter,
|
||||||
[FromQuery] SearchPagination pagination,
|
[FromQuery] SearchPagination pagination,
|
||||||
[FromQuery] Include<Show> fields
|
[FromQuery] Include<Show> fields
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return SearchPage(await _searchManager.SearchShows(q, sortBy, pagination, fields));
|
return SearchPage(await _searchManager.SearchShows(q, sortBy, filter, pagination, fields));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -117,11 +119,12 @@ public class SearchApi : BaseApi
|
|||||||
public async Task<SearchPage<Movie>> SearchMovies(
|
public async Task<SearchPage<Movie>> SearchMovies(
|
||||||
[FromQuery] string? q,
|
[FromQuery] string? q,
|
||||||
[FromQuery] Sort<Movie> sortBy,
|
[FromQuery] Sort<Movie> sortBy,
|
||||||
|
[FromQuery] Filter<ILibraryItem>? filter,
|
||||||
[FromQuery] SearchPagination pagination,
|
[FromQuery] SearchPagination pagination,
|
||||||
[FromQuery] Include<Movie> fields
|
[FromQuery] Include<Movie> fields
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return SearchPage(await _searchManager.SearchMovies(q, sortBy, pagination, fields));
|
return SearchPage(await _searchManager.SearchMovies(q, sortBy, filter, pagination, fields));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -118,33 +118,36 @@ public class SearchManager : ISearchManager
|
|||||||
public Task<SearchPage<Movie>.SearchResult> SearchMovies(
|
public Task<SearchPage<Movie>.SearchResult> SearchMovies(
|
||||||
string? query,
|
string? query,
|
||||||
Sort<Movie> sortBy,
|
Sort<Movie> sortBy,
|
||||||
|
Filter<ILibraryItem>? filter,
|
||||||
SearchPagination pagination,
|
SearchPagination pagination,
|
||||||
Include<Movie>? include = default
|
Include<Movie>? include = default
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return _Search("items", query, $"kind = {nameof(Movie)}", sortBy, pagination, include);
|
return _Search("items", query, _CreateMediaTypeFilter<Movie>(filter), sortBy, pagination, include);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public Task<SearchPage<Show>.SearchResult> SearchShows(
|
public Task<SearchPage<Show>.SearchResult> SearchShows(
|
||||||
string? query,
|
string? query,
|
||||||
Sort<Show> sortBy,
|
Sort<Show> sortBy,
|
||||||
|
Filter<ILibraryItem>? filter,
|
||||||
SearchPagination pagination,
|
SearchPagination pagination,
|
||||||
Include<Show>? include = default
|
Include<Show>? include = default
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return _Search("items", query, $"kind = {nameof(Show)}", sortBy, pagination, include);
|
return _Search("items", query, _CreateMediaTypeFilter<Show>(filter), sortBy, pagination, include);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public Task<SearchPage<Collection>.SearchResult> SearchCollections(
|
public Task<SearchPage<Collection>.SearchResult> SearchCollections(
|
||||||
string? query,
|
string? query,
|
||||||
Sort<Collection> sortBy,
|
Sort<Collection> sortBy,
|
||||||
|
Filter<ILibraryItem>? filter,
|
||||||
SearchPagination pagination,
|
SearchPagination pagination,
|
||||||
Include<Collection>? include = default
|
Include<Collection>? include = default
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return _Search("items", query, $"kind = {nameof(Collection)}", sortBy, pagination, include);
|
return _Search("items", query, _CreateMediaTypeFilter<Collection>(filter), sortBy, pagination, include);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
@ -185,6 +188,16 @@ public class SearchManager : ISearchManager
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string _CreateMediaTypeFilter<T>(Filter<ILibraryItem>? filter) where T : ILibraryItem
|
||||||
|
{
|
||||||
|
string filterString = $"kind = {typeof(T).Name}";
|
||||||
|
if (filter is not null)
|
||||||
|
{
|
||||||
|
filterString += $" AND ({filter.CreateMeilisearchFilter()})";
|
||||||
|
}
|
||||||
|
return filterString;
|
||||||
|
}
|
||||||
|
|
||||||
private class IdResource
|
private class IdResource
|
||||||
{
|
{
|
||||||
public Guid Id { get; set; }
|
public Guid Id { get; set; }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user