From f4bac4e6704f9602e4afd95ed2b11879dfad7bc0 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Sun, 26 Sep 2021 19:08:00 +0200 Subject: [PATCH] API: Documenting the studios api --- src/Kyoo.Core/Views/StudioApi.cs | 81 ++++++++++++++++++-------------- 1 file changed, 45 insertions(+), 36 deletions(-) diff --git a/src/Kyoo.Core/Views/StudioApi.cs b/src/Kyoo.Core/Views/StudioApi.cs index d15242f5..ae138be3 100644 --- a/src/Kyoo.Core/Views/StudioApi.cs +++ b/src/Kyoo.Core/Views/StudioApi.cs @@ -22,74 +22,83 @@ using System.Linq; using System.Threading.Tasks; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models; +using Kyoo.Abstractions.Models.Attributes; using Kyoo.Abstractions.Models.Permissions; +using Kyoo.Abstractions.Models.Utils; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; +using static Kyoo.Abstractions.Models.Utils.Constants; namespace Kyoo.Core.Api { - [Route("api/studio")] + /// + /// Information about one or multiple . + /// [Route("api/studios")] + [Route("api/studio", Order = AlternativeRoute)] [ApiController] [PartialPermission(nameof(ShowApi))] + [ApiDefinition("Studios", Group = MetadataGroup)] public class StudioApi : CrudApi { + /// + /// The library manager used to modify or retrieve information in the data store. + /// private readonly ILibraryManager _libraryManager; + /// + /// Create a new . + /// + /// + /// The library manager used to modify or retrieve information in the data store. + /// public StudioApi(ILibraryManager libraryManager) : base(libraryManager.StudioRepository) { _libraryManager = libraryManager; } - [HttpGet("{id:int}/show")] - [HttpGet("{id:int}/shows")] + /// + /// Get shows + /// + /// + /// List shows that were made by this specific studio. + /// + /// The ID or slug of the . + /// A key to sort shows by. + /// An optional list of filters. + /// The number of shows to return. + /// An optional show's ID to start the query from this specific item. + /// A page of shows. + /// The filters or the sort parameters are invalid. + /// No studio with the given ID or slug could be found. + [HttpGet("{identifier:id}/shows")] + [HttpGet("{identifier:id}/show", Order = AlternativeRoute)] [PartialPermission(Kind.Read)] - public async Task>> GetShows(int id, + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status400BadRequest, Type = typeof(RequestError))] + [ProducesResponseType(StatusCodes.Status404NotFound)] + public async Task>> GetShows(Identifier identifier, [FromQuery] string sortBy, - [FromQuery] int afterID, [FromQuery] Dictionary where, - [FromQuery] int limit = 20) + [FromQuery] int limit = 20, + [FromQuery] int? afterID = null) { try { ICollection resources = await _libraryManager.GetAll( - ApiHelper.ParseWhere(where, x => x.StudioID == id), + ApiHelper.ParseWhere(where, identifier.Matcher(x => x.StudioID, x => x.Studio.Slug)), new Sort(sortBy), - new Pagination(limit, afterID)); + new Pagination(limit, afterID) + ); - if (!resources.Any() && await _libraryManager.GetOrDefault(id) == null) + if (!resources.Any() && await _libraryManager.GetOrDefault(identifier.IsSame()) == 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 }); + return BadRequest(new RequestError(ex.Message)); } } }