using System.Collections.Generic; using System.Threading.Tasks; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models; using Kyoo.Abstractions.Models.Permissions; using Microsoft.AspNetCore.Mvc; namespace Kyoo.Core.Api { [Route("api/search/{query}")] [ApiController] public class SearchApi : ControllerBase { private readonly ILibraryManager _libraryManager; public SearchApi(ILibraryManager libraryManager) { _libraryManager = libraryManager; } [HttpGet] [Permission(nameof(Collection), Kind.Read)] [Permission(nameof(Show), Kind.Read)] [Permission(nameof(Episode), Kind.Read)] [Permission(nameof(People), Kind.Read)] [Permission(nameof(Genre), Kind.Read)] [Permission(nameof(Studio), Kind.Read)] public async Task> Search(string query) { return new SearchResult { Query = query, Collections = await _libraryManager.Search(query), Shows = await _libraryManager.Search(query), Episodes = await _libraryManager.Search(query), People = await _libraryManager.Search(query), Genres = await _libraryManager.Search(query), Studios = await _libraryManager.Search(query) }; } [HttpGet("collection")] [HttpGet("collections")] [Permission(nameof(Collection), Kind.Read)] public Task> SearchCollections(string query) { return _libraryManager.Search(query); } [HttpGet("show")] [HttpGet("shows")] [Permission(nameof(Show), Kind.Read)] public Task> SearchShows(string query) { return _libraryManager.Search(query); } [HttpGet("episode")] [HttpGet("episodes")] [Permission(nameof(Episode), Kind.Read)] public Task> SearchEpisodes(string query) { return _libraryManager.Search(query); } [HttpGet("people")] [Permission(nameof(People), Kind.Read)] public Task> SearchPeople(string query) { return _libraryManager.Search(query); } [HttpGet("genre")] [HttpGet("genres")] [Permission(nameof(Genre), Kind.Read)] public Task> SearchGenres(string query) { return _libraryManager.Search(query); } [HttpGet("studio")] [HttpGet("studios")] [Permission(nameof(Studio), Kind.Read)] public Task> SearchStudios(string query) { return _libraryManager.Search(query); } } }