using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models; using Kyoo.Abstractions.Models.Permissions; using Kyoo.Core.Models.Options; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; namespace Kyoo.Core.Api { [Route("api/studio")] [Route("api/studios")] [ApiController] [PartialPermission(nameof(ShowApi))] public class StudioApi : CrudApi { private readonly ILibraryManager _libraryManager; public StudioApi(ILibraryManager libraryManager, IOptions options) : base(libraryManager.StudioRepository, options.Value.PublicUrl) { _libraryManager = libraryManager; } [HttpGet("{id:int}/show")] [HttpGet("{id:int}/shows")] [PartialPermission(Kind.Read)] public async Task>> GetShows(int id, [FromQuery] string sortBy, [FromQuery] int afterID, [FromQuery] Dictionary where, [FromQuery] int limit = 20) { try { ICollection resources = await _libraryManager.GetAll( ApiHelper.ParseWhere(where, x => x.StudioID == id), new Sort(sortBy), new Pagination(limit, afterID)); if (!resources.Any() && await _libraryManager.GetOrDefault(id) == null) return NotFound(); return Page(resources, limit); } catch (ArgumentException ex) { return BadRequest(new {Error = ex.Message}); } } [HttpGet("{slug}/show")] [HttpGet("{slug}/shows")] [PartialPermission(Kind.Read)] public async Task>> GetShows(string slug, [FromQuery] string sortBy, [FromQuery] int afterID, [FromQuery] Dictionary where, [FromQuery] int limit = 20) { try { ICollection resources = await _libraryManager.GetAll( ApiHelper.ParseWhere(where, x => x.Studio.Slug == slug), new Sort(sortBy), new Pagination(limit, afterID)); if (!resources.Any() && await _libraryManager.GetOrDefault(slug) == null) return NotFound(); return Page(resources, limit); } catch (ArgumentException ex) { return BadRequest(new {Error = ex.Message}); } } } }