mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-05-13 08:37:07 +00:00
consolidate OpenAPI categories and deprecate startup routes (#16757)
Some checks are pending
CodeQL / Analyze (push) Waiting to run
Tests / run-tests (macos-latest) (push) Waiting to run
Tests / run-tests (ubuntu-latest) (push) Waiting to run
Tests / run-tests (windows-latest) (push) Waiting to run
OpenAPI Publish / OpenAPI - Publish Artifact (push) Waiting to run
OpenAPI Publish / OpenAPI - Publish Unstable Spec (push) Blocked by required conditions
OpenAPI Publish / OpenAPI - Publish Stable Spec (push) Blocked by required conditions
Project Automation / Project board (push) Waiting to run
Merge Conflict Labeler / Labeling (push) Waiting to run
Some checks are pending
CodeQL / Analyze (push) Waiting to run
Tests / run-tests (macos-latest) (push) Waiting to run
Tests / run-tests (ubuntu-latest) (push) Waiting to run
Tests / run-tests (windows-latest) (push) Waiting to run
OpenAPI Publish / OpenAPI - Publish Artifact (push) Waiting to run
OpenAPI Publish / OpenAPI - Publish Unstable Spec (push) Blocked by required conditions
OpenAPI Publish / OpenAPI - Publish Stable Spec (push) Blocked by required conditions
Project Automation / Project board (push) Waiting to run
Merge Conflict Labeler / Labeling (push) Waiting to run
This commit is contained in:
commit
27a3ccb7e4
9 changed files with 24 additions and 3 deletions
|
|
@ -20,6 +20,7 @@ namespace Jellyfin.Api.Controllers;
|
||||||
/// The dashboard controller.
|
/// The dashboard controller.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Route("")]
|
[Route("")]
|
||||||
|
[Tags("Plugin")]
|
||||||
public class DashboardController : BaseJellyfinApiController
|
public class DashboardController : BaseJellyfinApiController
|
||||||
{
|
{
|
||||||
private readonly ILogger<DashboardController> _logger;
|
private readonly ILogger<DashboardController> _logger;
|
||||||
|
|
|
||||||
|
|
@ -196,6 +196,7 @@ public class InstantMixController : BaseJellyfinApiController
|
||||||
/// <returns>A <see cref="QueryResult{BaseItemDto}"/> with the playlist items.</returns>
|
/// <returns>A <see cref="QueryResult{BaseItemDto}"/> with the playlist items.</returns>
|
||||||
[HttpGet("MusicGenres/{name}/InstantMix")]
|
[HttpGet("MusicGenres/{name}/InstantMix")]
|
||||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
|
[Obsolete("Use GetInstantMixFromItem")]
|
||||||
public ActionResult<QueryResult<BaseItemDto>> GetInstantMixFromMusicGenreByName(
|
public ActionResult<QueryResult<BaseItemDto>> GetInstantMixFromMusicGenreByName(
|
||||||
[FromRoute, Required] string name,
|
[FromRoute, Required] string name,
|
||||||
[FromQuery] Guid? userId,
|
[FromQuery] Guid? userId,
|
||||||
|
|
@ -359,7 +360,7 @@ public class InstantMixController : BaseJellyfinApiController
|
||||||
[HttpGet("MusicGenres/InstantMix")]
|
[HttpGet("MusicGenres/InstantMix")]
|
||||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
||||||
[Obsolete("Use GetInstantMixFromMusicGenreByName")]
|
[Obsolete("Use GetInstantMixFromItem")]
|
||||||
public ActionResult<QueryResult<BaseItemDto>> GetInstantMixFromMusicGenreById(
|
public ActionResult<QueryResult<BaseItemDto>> GetInstantMixFromMusicGenreById(
|
||||||
[FromQuery, Required] Guid id,
|
[FromQuery, Required] Guid id,
|
||||||
[FromQuery] Guid? userId,
|
[FromQuery] Guid? userId,
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ namespace Jellyfin.Api.Controllers;
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Route("Items")]
|
[Route("Items")]
|
||||||
[Authorize(Policy = Policies.RequiresElevation)]
|
[Authorize(Policy = Policies.RequiresElevation)]
|
||||||
|
[Tags("Library")]
|
||||||
public class ItemRefreshController : BaseJellyfinApiController
|
public class ItemRefreshController : BaseJellyfinApiController
|
||||||
{
|
{
|
||||||
private readonly ILibraryManager _libraryManager;
|
private readonly ILibraryManager _libraryManager;
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ namespace Jellyfin.Api.Controllers;
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Route("")]
|
[Route("")]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
[Tags("Item")]
|
[Tags("Library")]
|
||||||
public class ItemsController : BaseJellyfinApiController
|
public class ItemsController : BaseJellyfinApiController
|
||||||
{
|
{
|
||||||
private readonly IUserManager _userManager;
|
private readonly IUserManager _userManager;
|
||||||
|
|
@ -955,6 +955,7 @@ public class ItemsController : BaseJellyfinApiController
|
||||||
[HttpGet("UserItems/{itemId}/UserData")]
|
[HttpGet("UserItems/{itemId}/UserData")]
|
||||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
||||||
|
[Tags("UserData")]
|
||||||
public ActionResult<UserItemDataDto?> GetItemUserData(
|
public ActionResult<UserItemDataDto?> GetItemUserData(
|
||||||
[FromQuery] Guid? userId,
|
[FromQuery] Guid? userId,
|
||||||
[FromRoute, Required] Guid itemId)
|
[FromRoute, Required] Guid itemId)
|
||||||
|
|
@ -1010,6 +1011,7 @@ public class ItemsController : BaseJellyfinApiController
|
||||||
[HttpPost("UserItems/{itemId}/UserData")]
|
[HttpPost("UserItems/{itemId}/UserData")]
|
||||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
||||||
|
[Tags("UserData")]
|
||||||
public ActionResult<UserItemDataDto?> UpdateItemUserData(
|
public ActionResult<UserItemDataDto?> UpdateItemUserData(
|
||||||
[FromQuery] Guid? userId,
|
[FromQuery] Guid? userId,
|
||||||
[FromRoute, Required] Guid itemId,
|
[FromRoute, Required] Guid itemId,
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,7 @@ public class PlaystateController : BaseJellyfinApiController
|
||||||
[HttpPost("UserPlayedItems/{itemId}")]
|
[HttpPost("UserPlayedItems/{itemId}")]
|
||||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
||||||
|
[Tags("UserData")]
|
||||||
public async Task<ActionResult<UserItemDataDto?>> MarkPlayedItem(
|
public async Task<ActionResult<UserItemDataDto?>> MarkPlayedItem(
|
||||||
[FromQuery] Guid? userId,
|
[FromQuery] Guid? userId,
|
||||||
[FromRoute, Required] Guid itemId,
|
[FromRoute, Required] Guid itemId,
|
||||||
|
|
@ -138,6 +139,7 @@ public class PlaystateController : BaseJellyfinApiController
|
||||||
[HttpDelete("UserPlayedItems/{itemId}")]
|
[HttpDelete("UserPlayedItems/{itemId}")]
|
||||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
||||||
|
[Tags("UserData")]
|
||||||
public async Task<ActionResult<UserItemDataDto?>> MarkUnplayedItem(
|
public async Task<ActionResult<UserItemDataDto?>> MarkUnplayedItem(
|
||||||
[FromQuery] Guid? userId,
|
[FromQuery] Guid? userId,
|
||||||
[FromRoute, Required] Guid itemId)
|
[FromRoute, Required] Guid itemId)
|
||||||
|
|
|
||||||
|
|
@ -432,6 +432,7 @@ public class SessionController : BaseJellyfinApiController
|
||||||
/// <returns>An <see cref="IEnumerable{NameIdPair}"/> with the auth providers.</returns>
|
/// <returns>An <see cref="IEnumerable{NameIdPair}"/> with the auth providers.</returns>
|
||||||
[HttpGet("Auth/Providers")]
|
[HttpGet("Auth/Providers")]
|
||||||
[Authorize(Policy = Policies.RequiresElevation)]
|
[Authorize(Policy = Policies.RequiresElevation)]
|
||||||
|
[Tags("Authentication")]
|
||||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
public ActionResult<IEnumerable<NameIdPair>> GetAuthProviders()
|
public ActionResult<IEnumerable<NameIdPair>> GetAuthProviders()
|
||||||
{
|
{
|
||||||
|
|
@ -444,6 +445,7 @@ public class SessionController : BaseJellyfinApiController
|
||||||
/// <response code="200">Password reset providers retrieved.</response>
|
/// <response code="200">Password reset providers retrieved.</response>
|
||||||
/// <returns>An <see cref="IEnumerable{NameIdPair}"/> with the password reset providers.</returns>
|
/// <returns>An <see cref="IEnumerable{NameIdPair}"/> with the password reset providers.</returns>
|
||||||
[HttpGet("Auth/PasswordResetProviders")]
|
[HttpGet("Auth/PasswordResetProviders")]
|
||||||
|
[Tags("Authentication")]
|
||||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
[Authorize(Policy = Policies.RequiresElevation)]
|
[Authorize(Policy = Policies.RequiresElevation)]
|
||||||
public ActionResult<IEnumerable<NameIdPair>> GetPasswordResetProviders()
|
public ActionResult<IEnumerable<NameIdPair>> GetPasswordResetProviders()
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Jellyfin.Api.Constants;
|
|
||||||
using Jellyfin.Api.Models.StartupDtos;
|
using Jellyfin.Api.Models.StartupDtos;
|
||||||
using MediaBrowser.Common.Api;
|
using MediaBrowser.Common.Api;
|
||||||
using MediaBrowser.Common.Net;
|
using MediaBrowser.Common.Net;
|
||||||
|
|
@ -54,6 +53,7 @@ public class StartupController : BaseJellyfinApiController
|
||||||
/// <returns>An <see cref="OkResult"/> containing the initial startup wizard configuration.</returns>
|
/// <returns>An <see cref="OkResult"/> containing the initial startup wizard configuration.</returns>
|
||||||
[HttpGet("Configuration")]
|
[HttpGet("Configuration")]
|
||||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
|
[Obsolete("Use configuration endpoints")]
|
||||||
public ActionResult<StartupConfigurationDto> GetStartupConfiguration()
|
public ActionResult<StartupConfigurationDto> GetStartupConfiguration()
|
||||||
{
|
{
|
||||||
return new StartupConfigurationDto
|
return new StartupConfigurationDto
|
||||||
|
|
@ -73,6 +73,7 @@ public class StartupController : BaseJellyfinApiController
|
||||||
/// <returns>A <see cref="NoContentResult"/> indicating success.</returns>
|
/// <returns>A <see cref="NoContentResult"/> indicating success.</returns>
|
||||||
[HttpPost("Configuration")]
|
[HttpPost("Configuration")]
|
||||||
[ProducesResponseType(StatusCodes.Status204NoContent)]
|
[ProducesResponseType(StatusCodes.Status204NoContent)]
|
||||||
|
[Obsolete("Use configuration endpoints")]
|
||||||
public ActionResult UpdateInitialConfiguration([FromBody, Required] StartupConfigurationDto startupConfiguration)
|
public ActionResult UpdateInitialConfiguration([FromBody, Required] StartupConfigurationDto startupConfiguration)
|
||||||
{
|
{
|
||||||
_config.Configuration.ServerName = startupConfiguration.ServerName ?? string.Empty;
|
_config.Configuration.ServerName = startupConfiguration.ServerName ?? string.Empty;
|
||||||
|
|
@ -91,6 +92,7 @@ public class StartupController : BaseJellyfinApiController
|
||||||
/// <returns>A <see cref="NoContentResult"/> indicating success.</returns>
|
/// <returns>A <see cref="NoContentResult"/> indicating success.</returns>
|
||||||
[HttpPost("RemoteAccess")]
|
[HttpPost("RemoteAccess")]
|
||||||
[ProducesResponseType(StatusCodes.Status204NoContent)]
|
[ProducesResponseType(StatusCodes.Status204NoContent)]
|
||||||
|
[Obsolete("Use configuration endpoints")]
|
||||||
public ActionResult SetRemoteAccess([FromBody, Required] StartupRemoteAccessDto startupRemoteAccessDto)
|
public ActionResult SetRemoteAccess([FromBody, Required] StartupRemoteAccessDto startupRemoteAccessDto)
|
||||||
{
|
{
|
||||||
NetworkConfiguration settings = _config.GetNetworkConfiguration();
|
NetworkConfiguration settings = _config.GetNetworkConfiguration();
|
||||||
|
|
@ -107,6 +109,7 @@ public class StartupController : BaseJellyfinApiController
|
||||||
[HttpGet("User")]
|
[HttpGet("User")]
|
||||||
[HttpGet("FirstUser", Name = "GetFirstUser_2")]
|
[HttpGet("FirstUser", Name = "GetFirstUser_2")]
|
||||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
|
[Obsolete("Use authentication endpoints")]
|
||||||
public async Task<StartupUserDto> GetFirstUser()
|
public async Task<StartupUserDto> GetFirstUser()
|
||||||
{
|
{
|
||||||
// TODO: Remove this method when startup wizard no longer requires an existing user.
|
// TODO: Remove this method when startup wizard no longer requires an existing user.
|
||||||
|
|
|
||||||
|
|
@ -208,6 +208,7 @@ public class UserController : BaseJellyfinApiController
|
||||||
/// <returns>A <see cref="Task"/> containing an <see cref="AuthenticationRequest"/> with information about the new session.</returns>
|
/// <returns>A <see cref="Task"/> containing an <see cref="AuthenticationRequest"/> with information about the new session.</returns>
|
||||||
[HttpPost("AuthenticateByName")]
|
[HttpPost("AuthenticateByName")]
|
||||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
|
[Tags("Authentication")]
|
||||||
public async Task<ActionResult<AuthenticationResult>> AuthenticateUserByName([FromBody, Required] AuthenticateUserByName request)
|
public async Task<ActionResult<AuthenticationResult>> AuthenticateUserByName([FromBody, Required] AuthenticateUserByName request)
|
||||||
{
|
{
|
||||||
var auth = await _authContext.GetAuthorizationInfo(Request).ConfigureAwait(false);
|
var auth = await _authContext.GetAuthorizationInfo(Request).ConfigureAwait(false);
|
||||||
|
|
@ -243,6 +244,7 @@ public class UserController : BaseJellyfinApiController
|
||||||
/// <returns>A <see cref="Task"/> containing an <see cref="AuthenticationRequest"/> with information about the new session.</returns>
|
/// <returns>A <see cref="Task"/> containing an <see cref="AuthenticationRequest"/> with information about the new session.</returns>
|
||||||
[HttpPost("AuthenticateWithQuickConnect")]
|
[HttpPost("AuthenticateWithQuickConnect")]
|
||||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
|
[Tags("Authentication")]
|
||||||
public ActionResult<AuthenticationResult> AuthenticateWithQuickConnect([FromBody, Required] QuickConnectDto request)
|
public ActionResult<AuthenticationResult> AuthenticateWithQuickConnect([FromBody, Required] QuickConnectDto request)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
|
@ -538,6 +540,7 @@ public class UserController : BaseJellyfinApiController
|
||||||
/// <returns>A <see cref="Task"/> containing a <see cref="ForgotPasswordResult"/>.</returns>
|
/// <returns>A <see cref="Task"/> containing a <see cref="ForgotPasswordResult"/>.</returns>
|
||||||
[HttpPost("ForgotPassword")]
|
[HttpPost("ForgotPassword")]
|
||||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
|
[Tags("Authentication")]
|
||||||
public async Task<ActionResult<ForgotPasswordResult>> ForgotPassword([FromBody, Required] ForgotPasswordDto forgotPasswordRequest)
|
public async Task<ActionResult<ForgotPasswordResult>> ForgotPassword([FromBody, Required] ForgotPasswordDto forgotPasswordRequest)
|
||||||
{
|
{
|
||||||
var ip = HttpContext.GetNormalizedRemoteIP();
|
var ip = HttpContext.GetNormalizedRemoteIP();
|
||||||
|
|
@ -562,6 +565,7 @@ public class UserController : BaseJellyfinApiController
|
||||||
/// <returns>A <see cref="Task"/> containing a <see cref="PinRedeemResult"/>.</returns>
|
/// <returns>A <see cref="Task"/> containing a <see cref="PinRedeemResult"/>.</returns>
|
||||||
[HttpPost("ForgotPassword/Pin")]
|
[HttpPost("ForgotPassword/Pin")]
|
||||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
|
[Tags("Authentication")]
|
||||||
public async Task<ActionResult<PinRedeemResult>> ForgotPasswordPin([FromBody, Required] ForgotPasswordPinDto forgotPasswordPinRequest)
|
public async Task<ActionResult<PinRedeemResult>> ForgotPasswordPin([FromBody, Required] ForgotPasswordPinDto forgotPasswordPinRequest)
|
||||||
{
|
{
|
||||||
var result = await _userManager.RedeemPasswordResetPin(forgotPasswordPinRequest.Pin).ConfigureAwait(false);
|
var result = await _userManager.RedeemPasswordResetPin(forgotPasswordPinRequest.Pin).ConfigureAwait(false);
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ namespace Jellyfin.Api.Controllers;
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Route("")]
|
[Route("")]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
|
[Tags("Library")]
|
||||||
public class UserLibraryController : BaseJellyfinApiController
|
public class UserLibraryController : BaseJellyfinApiController
|
||||||
{
|
{
|
||||||
private readonly IUserManager _userManager;
|
private readonly IUserManager _userManager;
|
||||||
|
|
@ -212,6 +213,7 @@ public class UserLibraryController : BaseJellyfinApiController
|
||||||
/// <returns>An <see cref="OkResult"/> containing the <see cref="UserItemDataDto"/>.</returns>
|
/// <returns>An <see cref="OkResult"/> containing the <see cref="UserItemDataDto"/>.</returns>
|
||||||
[HttpPost("UserFavoriteItems/{itemId}")]
|
[HttpPost("UserFavoriteItems/{itemId}")]
|
||||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
|
[Tags("UserData")]
|
||||||
public ActionResult<UserItemDataDto> MarkFavoriteItem(
|
public ActionResult<UserItemDataDto> MarkFavoriteItem(
|
||||||
[FromQuery] Guid? userId,
|
[FromQuery] Guid? userId,
|
||||||
[FromRoute, Required] Guid itemId)
|
[FromRoute, Required] Guid itemId)
|
||||||
|
|
@ -259,6 +261,7 @@ public class UserLibraryController : BaseJellyfinApiController
|
||||||
/// <returns>An <see cref="OkResult"/> containing the <see cref="UserItemDataDto"/>.</returns>
|
/// <returns>An <see cref="OkResult"/> containing the <see cref="UserItemDataDto"/>.</returns>
|
||||||
[HttpDelete("UserFavoriteItems/{itemId}")]
|
[HttpDelete("UserFavoriteItems/{itemId}")]
|
||||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
|
[Tags("UserData")]
|
||||||
public ActionResult<UserItemDataDto> UnmarkFavoriteItem(
|
public ActionResult<UserItemDataDto> UnmarkFavoriteItem(
|
||||||
[FromQuery] Guid? userId,
|
[FromQuery] Guid? userId,
|
||||||
[FromRoute, Required] Guid itemId)
|
[FromRoute, Required] Guid itemId)
|
||||||
|
|
@ -306,6 +309,7 @@ public class UserLibraryController : BaseJellyfinApiController
|
||||||
/// <returns>An <see cref="OkResult"/> containing the <see cref="UserItemDataDto"/>.</returns>
|
/// <returns>An <see cref="OkResult"/> containing the <see cref="UserItemDataDto"/>.</returns>
|
||||||
[HttpDelete("UserItems/{itemId}/Rating")]
|
[HttpDelete("UserItems/{itemId}/Rating")]
|
||||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
|
[Tags("UserData")]
|
||||||
public ActionResult<UserItemDataDto?> DeleteUserItemRating(
|
public ActionResult<UserItemDataDto?> DeleteUserItemRating(
|
||||||
[FromQuery] Guid? userId,
|
[FromQuery] Guid? userId,
|
||||||
[FromRoute, Required] Guid itemId)
|
[FromRoute, Required] Guid itemId)
|
||||||
|
|
@ -354,6 +358,7 @@ public class UserLibraryController : BaseJellyfinApiController
|
||||||
/// <returns>An <see cref="OkResult"/> containing the <see cref="UserItemDataDto"/>.</returns>
|
/// <returns>An <see cref="OkResult"/> containing the <see cref="UserItemDataDto"/>.</returns>
|
||||||
[HttpPost("UserItems/{itemId}/Rating")]
|
[HttpPost("UserItems/{itemId}/Rating")]
|
||||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
|
[Tags("UserData")]
|
||||||
public ActionResult<UserItemDataDto?> UpdateUserItemRating(
|
public ActionResult<UserItemDataDto?> UpdateUserItemRating(
|
||||||
[FromQuery] Guid? userId,
|
[FromQuery] Guid? userId,
|
||||||
[FromRoute, Required] Guid itemId,
|
[FromRoute, Required] Guid itemId,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue