|
@@ -34,6 +34,7 @@ public class ItemsController : BaseJellyfinApiController
|
|
|
private readonly IDtoService _dtoService;
|
|
|
private readonly ILogger<ItemsController> _logger;
|
|
|
private readonly ISessionManager _sessionManager;
|
|
|
+ private readonly IUserDataManager _userDataRepository;
|
|
|
|
|
|
/// <summary>
|
|
|
/// Initializes a new instance of the <see cref="ItemsController"/> class.
|
|
@@ -44,13 +45,15 @@ public class ItemsController : BaseJellyfinApiController
|
|
|
/// <param name="dtoService">Instance of the <see cref="IDtoService"/> interface.</param>
|
|
|
/// <param name="logger">Instance of the <see cref="ILogger"/> interface.</param>
|
|
|
/// <param name="sessionManager">Instance of the <see cref="ISessionManager"/> interface.</param>
|
|
|
+ /// <param name="userDataRepository">Instance of the <see cref="IUserDataManager"/> interface.</param>
|
|
|
public ItemsController(
|
|
|
IUserManager userManager,
|
|
|
ILibraryManager libraryManager,
|
|
|
ILocalizationManager localization,
|
|
|
IDtoService dtoService,
|
|
|
ILogger<ItemsController> logger,
|
|
|
- ISessionManager sessionManager)
|
|
|
+ ISessionManager sessionManager,
|
|
|
+ IUserDataManager userDataRepository)
|
|
|
{
|
|
|
_userManager = userManager;
|
|
|
_libraryManager = libraryManager;
|
|
@@ -58,6 +61,7 @@ public class ItemsController : BaseJellyfinApiController
|
|
|
_dtoService = dtoService;
|
|
|
_logger = logger;
|
|
|
_sessionManager = sessionManager;
|
|
|
+ _userDataRepository = userDataRepository;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -881,4 +885,64 @@ public class ItemsController : BaseJellyfinApiController
|
|
|
itemsResult.TotalRecordCount,
|
|
|
returnItems);
|
|
|
}
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// Get Item User Data.
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="userId">The user id.</param>
|
|
|
+ /// <param name="itemId">The item id.</param>
|
|
|
+ /// <response code="200">return item user data.</response>
|
|
|
+ /// <response code="404">Item is not found.</response>
|
|
|
+ /// <returns>Return <see cref="UserItemDataDto"/>.</returns>
|
|
|
+ [HttpGet("Users/{userId}/Items/{itemId}/UserData")]
|
|
|
+ [ProducesResponseType(StatusCodes.Status200OK)]
|
|
|
+ [ProducesResponseType(StatusCodes.Status404NotFound)]
|
|
|
+ public ActionResult<UserItemDataDto> GetItemUserData(
|
|
|
+ [FromRoute, Required] Guid userId,
|
|
|
+ [FromRoute, Required] Guid itemId)
|
|
|
+ {
|
|
|
+ if (!RequestHelpers.AssertCanUpdateUser(_userManager, User, userId, true))
|
|
|
+ {
|
|
|
+ return StatusCode(StatusCodes.Status403Forbidden, "User is not allowed to view this item user data.");
|
|
|
+ }
|
|
|
+
|
|
|
+ var user = _userManager.GetUserById(userId) ?? throw new ResourceNotFoundException();
|
|
|
+ var item = _libraryManager.GetItemById(itemId);
|
|
|
+
|
|
|
+ return (item == null) ? NotFound() : _userDataRepository.GetUserDataDto(item, user);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// Update Item User Data.
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="userId">The user id.</param>
|
|
|
+ /// <param name="itemId">The item id.</param>
|
|
|
+ /// <param name="userDataDto">New user data object.</param>
|
|
|
+ /// <response code="200">return updated user item data.</response>
|
|
|
+ /// <response code="404">Item is not found.</response>
|
|
|
+ /// <returns>Return <see cref="UserItemDataDto"/>.</returns>
|
|
|
+ [HttpPost("Users/{userId}/Items/{itemId}/UserData")]
|
|
|
+ [ProducesResponseType(StatusCodes.Status200OK)]
|
|
|
+ [ProducesResponseType(StatusCodes.Status404NotFound)]
|
|
|
+ public ActionResult<UserItemDataDto> UpdateItemUserData(
|
|
|
+ [FromRoute, Required] Guid userId,
|
|
|
+ [FromRoute, Required] Guid itemId,
|
|
|
+ [FromBody, Required] UpdateUserItemDataDto userDataDto)
|
|
|
+ {
|
|
|
+ if (!RequestHelpers.AssertCanUpdateUser(_userManager, User, userId, true))
|
|
|
+ {
|
|
|
+ return StatusCode(StatusCodes.Status403Forbidden, "User is not allowed to update this item user data.");
|
|
|
+ }
|
|
|
+
|
|
|
+ var user = _userManager.GetUserById(userId) ?? throw new ResourceNotFoundException();
|
|
|
+ var item = _libraryManager.GetItemById(itemId);
|
|
|
+ if (item == null)
|
|
|
+ {
|
|
|
+ return NotFound();
|
|
|
+ }
|
|
|
+
|
|
|
+ _userDataRepository.SaveUserData(user, item, userDataDto, UserDataSaveReason.UpdateUserData);
|
|
|
+
|
|
|
+ return _userDataRepository.GetUserDataDto(item, user);
|
|
|
+ }
|
|
|
}
|