fix(radarr): ensure RequestedUser is loaded when creating tags

- Replace Find() with GetWithUser() in MovieRequestEngine methods to properly load RequestedUser navigation property
- Add null check in GetOrCreateTag as a safety measure
- Fix NullReferenceException when "Add the user as a tag" feature is enabled

Fixes #5045
This commit is contained in:
tidusjar 2025-05-14 21:51:41 +01:00
commit f8658fe6d5
2 changed files with 15 additions and 6 deletions

View file

@ -598,13 +598,13 @@ namespace Ombi.Core.Engine
public async Task<RequestEngineResult> ApproveMovieById(int requestId, bool is4K) public async Task<RequestEngineResult> ApproveMovieById(int requestId, bool is4K)
{ {
var request = await MovieRepository.Find(requestId); var request = await MovieRepository.GetWithUser().FirstOrDefaultAsync(x => x.Id == requestId);
return await ApproveMovie(request, is4K); return await ApproveMovie(request, is4K);
} }
public async Task<RequestEngineResult> DenyMovieById(int modelId, string denyReason, bool is4K) public async Task<RequestEngineResult> DenyMovieById(int modelId, string denyReason, bool is4K)
{ {
var request = await MovieRepository.Find(modelId); var request = await MovieRepository.GetWithUser().FirstOrDefaultAsync(x => x.Id == modelId);
if (request == null) if (request == null)
{ {
return new RequestEngineResult return new RequestEngineResult
@ -790,7 +790,7 @@ namespace Ombi.Core.Engine
public async Task<RequestEngineResult> ReProcessRequest(int requestId, bool is4K, CancellationToken cancellationToken) public async Task<RequestEngineResult> ReProcessRequest(int requestId, bool is4K, CancellationToken cancellationToken)
{ {
var request = await MovieRepository.Find(requestId); var request = await MovieRepository.GetWithUser().FirstOrDefaultAsync(x => x.Id == requestId);
if (request == null) if (request == null)
{ {
return new RequestEngineResult return new RequestEngineResult
@ -805,7 +805,7 @@ namespace Ombi.Core.Engine
public async Task<RequestEngineResult> MarkUnavailable(int modelId, bool is4K) public async Task<RequestEngineResult> MarkUnavailable(int modelId, bool is4K)
{ {
var request = await MovieRepository.Find(modelId); var request = await MovieRepository.GetWithUser().FirstOrDefaultAsync(x => x.Id == modelId);
if (request == null) if (request == null)
{ {
return new RequestEngineResult return new RequestEngineResult
@ -834,7 +834,7 @@ namespace Ombi.Core.Engine
public async Task<RequestEngineResult> MarkAvailable(int modelId, bool is4K) public async Task<RequestEngineResult> MarkAvailable(int modelId, bool is4K)
{ {
var request = await MovieRepository.Find(modelId); var request = await MovieRepository.GetWithUser().FirstOrDefaultAsync(x => x.Id == modelId);
if (request == null) if (request == null)
{ {
return new RequestEngineResult return new RequestEngineResult

View file

@ -182,7 +182,10 @@ namespace Ombi.Core.Senders
if (settings.SendUserTags) if (settings.SendUserTags)
{ {
var userTag = await GetOrCreateTag(model, settings); var userTag = await GetOrCreateTag(model, settings);
tags.Add(userTag.id); if (userTag != null)
{
tags.Add(userTag.id);
}
} }
// Overrides on the request take priority // Overrides on the request take priority
@ -246,6 +249,12 @@ namespace Ombi.Core.Senders
private async Task<Tag> GetOrCreateTag(MovieRequests model, RadarrSettings s) private async Task<Tag> GetOrCreateTag(MovieRequests model, RadarrSettings s)
{ {
if (model.RequestedUser == null)
{
_log.LogWarning("Cannot create tag - RequestedUser is null for movie request {MovieTitle}", model.Title);
return null;
}
var tagName = model.RequestedUser.UserName; var tagName = model.RequestedUser.UserName;
// Does tag exist? // Does tag exist?