diff --git a/src/Kyoo.Abstractions/Kyoo.Abstractions.csproj b/src/Kyoo.Abstractions/Kyoo.Abstractions.csproj index 59fdf472..3bc50076 100644 --- a/src/Kyoo.Abstractions/Kyoo.Abstractions.csproj +++ b/src/Kyoo.Abstractions/Kyoo.Abstractions.csproj @@ -11,7 +11,6 @@ - diff --git a/src/Kyoo.Abstractions/Models/Attributes/AltRoute/AltHttpGetAttribute.cs b/src/Kyoo.Abstractions/Models/Attributes/AltRoute/AltHttpGetAttribute.cs deleted file mode 100644 index 99f843b6..00000000 --- a/src/Kyoo.Abstractions/Models/Attributes/AltRoute/AltHttpGetAttribute.cs +++ /dev/null @@ -1,19 +0,0 @@ -using JetBrains.Annotations; -using Microsoft.AspNetCore.Mvc; - -namespace Kyoo.Abstractions.Models.Attributes -{ - /// - /// A custom that indicate an alternatives, hidden route. - /// - public class AltHttpGetAttribute : HttpGetAttribute - { - /// - /// Create a new . - /// - /// The route template, see . - public AltHttpGetAttribute([NotNull] [RouteTemplateAttribute] string template) - : base(template) - { } - } -} diff --git a/src/Kyoo.Abstractions/Models/Attributes/AltRoute/AltRouteAttribute.cs b/src/Kyoo.Abstractions/Models/Utils/Constants.cs similarity index 58% rename from src/Kyoo.Abstractions/Models/Attributes/AltRoute/AltRouteAttribute.cs rename to src/Kyoo.Abstractions/Models/Utils/Constants.cs index 71734979..595877fb 100644 --- a/src/Kyoo.Abstractions/Models/Attributes/AltRoute/AltRouteAttribute.cs +++ b/src/Kyoo.Abstractions/Models/Utils/Constants.cs @@ -16,24 +16,17 @@ // You should have received a copy of the GNU General Public License // along with Kyoo. If not, see . -using System; -using JetBrains.Annotations; -using Microsoft.AspNetCore.Mvc; - -namespace Kyoo.Abstractions.Models.Attributes +namespace Kyoo.Abstractions.Models.Utils { /// - /// A custom that indicate an alternatives, hidden route. + /// A class containing constant numbers. /// - [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)] - public class AltRouteAttribute : RouteAttribute + public static class Constants { /// - /// Create a new . + /// A property to use on a Microsoft.AspNet.MVC.Route.Order property to mark it as an alternative route + /// that won't be included on the swagger. /// - /// The route template, see . - public AltRouteAttribute([NotNull] [RouteTemplateAttribute] string template) - : base(template) - { } + public const int AlternativeRoute = 1; } } diff --git a/src/Kyoo.Core/Views/CollectionApi.cs b/src/Kyoo.Core/Views/CollectionApi.cs index 6ff5fe9b..93c54520 100644 --- a/src/Kyoo.Core/Views/CollectionApi.cs +++ b/src/Kyoo.Core/Views/CollectionApi.cs @@ -22,17 +22,17 @@ using System.Linq; using System.Threading.Tasks; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models; -using Kyoo.Abstractions.Models.Attributes; using Kyoo.Abstractions.Models.Exceptions; using Kyoo.Abstractions.Models.Permissions; using Kyoo.Core.Models.Options; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; +using static Kyoo.Abstractions.Models.Utils.Constants; namespace Kyoo.Core.Api { [Route("api/collections")] - [AltRoute("api/collection")] + [Route("api/collection", Order = AlternativeRoute)] [ApiController] [PartialPermission(nameof(CollectionApi))] public class CollectionApi : CrudApi @@ -53,7 +53,7 @@ namespace Kyoo.Core.Api } [HttpGet("{id:int}/shows")] - [AltHttpGet("{id:int}/show")] + [HttpGet("{id:int}/show", Order = AlternativeRoute)] [PartialPermission(Kind.Read)] public async Task>> GetShows(int id, [FromQuery] string sortBy, @@ -79,7 +79,7 @@ namespace Kyoo.Core.Api } [HttpGet("{slug}/shows")] - [AltHttpGet("{slug}/show")] + [HttpGet("{slug}/show", Order = AlternativeRoute)] [PartialPermission(Kind.Read)] public async Task>> GetShows(string slug, [FromQuery] string sortBy, @@ -105,7 +105,7 @@ namespace Kyoo.Core.Api } [HttpGet("{id:int}/libraries")] - [AltHttpGet("{id:int}/library")] + [HttpGet("{id:int}/library", Order = AlternativeRoute)] [PartialPermission(Kind.Read)] public async Task>> GetLibraries(int id, [FromQuery] string sortBy, @@ -131,7 +131,7 @@ namespace Kyoo.Core.Api } [HttpGet("{slug}/libraries")] - [AltHttpGet("{slug}/library")] + [HttpGet("{slug}/library", Order = AlternativeRoute)] [PartialPermission(Kind.Read)] public async Task>> GetLibraries(string slug, [FromQuery] string sortBy, diff --git a/src/Kyoo.Swagger/SwaggerModule.cs b/src/Kyoo.Swagger/SwaggerModule.cs index 84375c49..92c947eb 100644 --- a/src/Kyoo.Swagger/SwaggerModule.cs +++ b/src/Kyoo.Swagger/SwaggerModule.cs @@ -19,12 +19,11 @@ using System; using System.Collections.Generic; using System.IO; -using System.Linq; using Kyoo.Abstractions.Controllers; -using Kyoo.Abstractions.Models.Attributes; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Microsoft.OpenApi.Models; +using static Kyoo.Abstractions.Models.Utils.Constants; namespace Kyoo.Swagger { @@ -71,12 +70,9 @@ namespace Kyoo.Swagger options.IncludeXmlComments(documentation); options.UseAllOfForInheritance(); - - options.DocInclusionPredicate((_, apiDescription) => - { - return apiDescription.ActionDescriptor.EndpointMetadata - .All(x => x is not AltRouteAttribute && x is not AltHttpGetAttribute); - }); + options.SwaggerGeneratorOptions.SortKeySelector = x => x.RelativePath; + options.DocInclusionPredicate((_, apiDescription) + => apiDescription.ActionDescriptor.AttributeRouteInfo?.Order != AlternativeRoute); }); }