From 6e5ec99ea10557c141ed8d755e672cef628d35f0 Mon Sep 17 00:00:00 2001 From: Cody Robibero Date: Sun, 3 Mar 2024 13:51:31 -0700 Subject: Move userId in API from route to optional query parameter (#11074) * Move userId in API from route to optional query parameter * Standardize UserViewsController * Move userId to query in ImageController * Move userId to query in ItemsController * Move userId to query in PlaystateController * Move userId to query in SuggestionsController * Move userId from route to query in UserLibraryController * Clean up routes * Move userId to query in UserController * fix bad merge --------- Co-authored-by: Niels van Velzen --- Jellyfin.Api/Controllers/UserViewsController.cs | 61 ++++++++++++++++++++----- 1 file changed, 50 insertions(+), 11 deletions(-) (limited to 'Jellyfin.Api/Controllers/UserViewsController.cs') diff --git a/Jellyfin.Api/Controllers/UserViewsController.cs b/Jellyfin.Api/Controllers/UserViewsController.cs index 035d04474..bf3ce1d39 100644 --- a/Jellyfin.Api/Controllers/UserViewsController.cs +++ b/Jellyfin.Api/Controllers/UserViewsController.cs @@ -4,6 +4,7 @@ using System.ComponentModel.DataAnnotations; using System.Globalization; using System.Linq; using Jellyfin.Api.Extensions; +using Jellyfin.Api.Helpers; using Jellyfin.Api.ModelBinders; using Jellyfin.Api.Models.UserViewDtos; using Jellyfin.Data.Enums; @@ -59,19 +60,17 @@ public class UserViewsController : BaseJellyfinApiController /// Whether or not to include hidden content. /// User views returned. /// An containing the user views. - [HttpGet("Users/{userId}/Views")] + [HttpGet("UserViews")] [ProducesResponseType(StatusCodes.Status200OK)] public QueryResult GetUserViews( - [FromRoute, Required] Guid userId, + [FromQuery] Guid? userId, [FromQuery] bool? includeExternalContent, [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] CollectionType?[] presetViews, [FromQuery] bool includeHidden = false) { - var query = new UserViewQuery - { - UserId = userId, - IncludeHidden = includeHidden - }; + userId = RequestHelpers.GetUserId(User, userId); + + var query = new UserViewQuery { UserId = userId.Value, IncludeHidden = includeHidden }; if (includeExternalContent.HasValue) { @@ -92,7 +91,7 @@ public class UserViewsController : BaseJellyfinApiController fields.Add(ItemFields.DisplayPreferencesId); dtoOptions.Fields = fields.ToArray(); - var user = _userManager.GetUserById(userId); + var user = _userManager.GetUserById(userId.Value); var dtos = folders.Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user)) .ToArray(); @@ -100,6 +99,26 @@ public class UserViewsController : BaseJellyfinApiController return new QueryResult(dtos); } + /// + /// Get user views. + /// + /// User id. + /// Whether or not to include external views such as channels or live tv. + /// Preset views. + /// Whether or not to include hidden content. + /// User views returned. + /// An containing the user views. + [HttpGet("Users/{userId}/Views")] + [ProducesResponseType(StatusCodes.Status200OK)] + [Obsolete("Kept for backwards compatibility")] + [ApiExplorerSettings(IgnoreApi = true)] + public QueryResult GetUserViewsLegacy( + [FromRoute, Required] Guid userId, + [FromQuery] bool? includeExternalContent, + [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] CollectionType?[] presetViews, + [FromQuery] bool includeHidden = false) + => GetUserViews(userId, includeExternalContent, presetViews, includeHidden); + /// /// Get user view grouping options. /// @@ -110,12 +129,13 @@ public class UserViewsController : BaseJellyfinApiController /// An containing the user view grouping options /// or a if user not found. /// - [HttpGet("Users/{userId}/GroupingOptions")] + [HttpGet("UserViews/GroupingOptions")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound)] - public ActionResult> GetGroupingOptions([FromRoute, Required] Guid userId) + public ActionResult> GetGroupingOptions([FromQuery] Guid? userId) { - var user = _userManager.GetUserById(userId); + userId = RequestHelpers.GetUserId(User, userId); + var user = _userManager.GetUserById(userId.Value); if (user is null) { return NotFound(); @@ -133,4 +153,23 @@ public class UserViewsController : BaseJellyfinApiController .OrderBy(i => i.Name) .AsEnumerable()); } + + /// + /// Get user view grouping options. + /// + /// User id. + /// User view grouping options returned. + /// User not found. + /// + /// An containing the user view grouping options + /// or a if user not found. + /// + [HttpGet("Users/{userId}/GroupingOptions")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [Obsolete("Kept for backwards compatibility")] + [ApiExplorerSettings(IgnoreApi = true)] + public ActionResult> GetGroupingOptionsLegacy( + [FromRoute, Required] Guid userId) + => GetGroupingOptions(userId); } -- cgit v1.2.3