From d1915481e047790f87523a0b5b4a5fafbd9f0c02 Mon Sep 17 00:00:00 2001 From: XShine555 Date: Mon, 20 Jul 2026 07:27:57 +0200 Subject: [PATCH] refactor(youtube): log service failures and decouple error messages YouTubeMusicService swallowed the exception into an ErrorOr description with no trace on the server side. Adds ILogger to the three operations. The download activity no longer names yt-dlp in its messages, since the downloader is an implementation detail behind IYouTubeDownloaderService. --- .../Activities/Audio/DownloadYouTubeAudioActivity.cs | 4 ++-- .../Musify.Infrastructure/Services/YouTubeMusicService.cs | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/backend/Musify.Infrastructure/MassTransit/Activities/Audio/DownloadYouTubeAudioActivity.cs b/backend/Musify.Infrastructure/MassTransit/Activities/Audio/DownloadYouTubeAudioActivity.cs index 7337a2e..2badb33 100644 --- a/backend/Musify.Infrastructure/MassTransit/Activities/Audio/DownloadYouTubeAudioActivity.cs +++ b/backend/Musify.Infrastructure/MassTransit/Activities/Audio/DownloadYouTubeAudioActivity.cs @@ -43,10 +43,10 @@ namespace Musify.Infrastructure.MassTransit.Activities.Audio if (downloadResult.ExitCode != 0) throw new InvalidOperationException( - $"yt-dlp failed with exit code {downloadResult.ExitCode}: {downloadResult.StandardError}"); + $"YouTube audio download failed: {downloadResult.StandardError}"); if (!File.Exists(destinationPath)) - throw new InvalidOperationException($"yt-dlp did not produce the expected file {destinationPath}."); + throw new InvalidOperationException($"YouTube audio download did not produce the expected file {destinationPath}."); logger.LogInformation("Downloaded YouTube audio for video {VideoId} to {DestinationPath}", executeContext.Arguments.VideoId, destinationPath); diff --git a/backend/Musify.Infrastructure/Services/YouTubeMusicService.cs b/backend/Musify.Infrastructure/Services/YouTubeMusicService.cs index 4217088..caf4e08 100644 --- a/backend/Musify.Infrastructure/Services/YouTubeMusicService.cs +++ b/backend/Musify.Infrastructure/Services/YouTubeMusicService.cs @@ -1,5 +1,6 @@ using ErrorOr; using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.Logging; using Musify.Application.Contracts; using Musify.Infrastructure.Configuration; using YouTubeMusicAPI.Client; @@ -9,7 +10,7 @@ using YouTubeMusicAPI.Pagination; namespace Musify.Infrastructure.Services { - public class YouTubeMusicService(YouTubeConfiguration configuration, IMemoryCache cache) : IYouTubeMusicService + public class YouTubeMusicService(YouTubeConfiguration configuration, IMemoryCache cache, ILogger logger) : IYouTubeMusicService { private readonly YouTubeMusicClient client = new(geographicalLocation: configuration.GeographicalLocation); @@ -34,6 +35,7 @@ namespace Musify.Infrastructure.Services } catch (Exception exception) { + logger.LogError(exception, "YouTube Music search failed for query '{Query}'", query); return Error.Failure(description: $"YouTube Music search failed: {exception.Message}"); } @@ -87,6 +89,7 @@ namespace Musify.Infrastructure.Services } catch (Exception exception) { + logger.LogError(exception, "Failed to resolve YouTube stream for '{VideoId}'", videoId); return Error.Failure(description: $"Failed to resolve YouTube stream for '{videoId}': {exception.Message}"); } @@ -138,6 +141,7 @@ namespace Musify.Infrastructure.Services } catch (Exception exception) { + logger.LogError(exception, "Failed to load YouTube song info for '{VideoId}'", videoId); return Error.Failure(description: $"Failed to load YouTube song info for '{videoId}': {exception.Message}"); } }