From 67186476ce1abbc0e524f1e9176da90b9cffc4fa Mon Sep 17 00:00:00 2001 From: XShine555 Date: Thu, 19 Mar 2026 10:41:32 +0100 Subject: [PATCH] Changes --- Application/Configuration/PlayListConfiguration.cs | 2 +- .../CreatePlayList/CreatePlayListCommandHandler.cs | 4 ++-- .../Identity/KeycloakDependencyInjection.cs | 10 +++++++++- Infrastructure/Infrastructure.csproj | 2 ++ .../Messaging/Consumers/RemoveFileConsumer.cs | 10 ++++++++++ .../Persistence/DatabaseDependencyInjection.cs | 12 ++---------- .../Persistence/DatabaseDesignTimeFactory.cs | 1 + 7 files changed, 27 insertions(+), 14 deletions(-) diff --git a/Application/Configuration/PlayListConfiguration.cs b/Application/Configuration/PlayListConfiguration.cs index 62d2a7f..abaaeb0 100644 --- a/Application/Configuration/PlayListConfiguration.cs +++ b/Application/Configuration/PlayListConfiguration.cs @@ -62,7 +62,7 @@ namespace Musify.Application.Configuration public string PresetSmallPicture { get; set; } = "PresetSmallPicture.webp"; - public string PresetMediumPicture { get; set; } = "PresettMediumPicture.webp"; + public string PresetMediumPicture { get; set; } = "PresetMediumPicture.webp"; public string PresetLargePicture { get; set; } = "PresetLargePicture.webp"; } diff --git a/Application/PlayLists/Commands/CreatePlayList/CreatePlayListCommandHandler.cs b/Application/PlayLists/Commands/CreatePlayList/CreatePlayListCommandHandler.cs index 67c0a81..f122f2f 100644 --- a/Application/PlayLists/Commands/CreatePlayList/CreatePlayListCommandHandler.cs +++ b/Application/PlayLists/Commands/CreatePlayList/CreatePlayListCommandHandler.cs @@ -33,14 +33,14 @@ namespace Musify.Application.PlayLists.Commands.CreatePlayList Name = request.Name, NormalizedName = request.Name.Trim().ToUpperInvariant(), Description = request.Description, - OriginalPictureKeyName = $"{imageId}.{request.PictureFileType}", + OriginalPictureKeyName = $"{imageId}{request.PictureFileType}", SmallPictureKeyName = playListConfiguration.Routes.PresetSmallPicture, MediumPictureKeyName = playListConfiguration.Routes.PresetMediumPicture, LargePictureKeyName = playListConfiguration.Routes.PresetLargePicture, }; await database.PlayLists.AddAsync(playList, cancellationToken); - var imageKeyName = $"{playListConfiguration.Routes.OriginalPictures}/{imageId}.{request.PictureFileType}"; + var imageKeyName = $"{playListConfiguration.Routes.OriginalPictures}/{imageId}{request.PictureFileType}"; var uploadResult = await storageHandler.UploadFileAsync( request.PictureStream, diff --git a/Infrastructure/Identity/KeycloakDependencyInjection.cs b/Infrastructure/Identity/KeycloakDependencyInjection.cs index f23619f..6ff5c3b 100644 --- a/Infrastructure/Identity/KeycloakDependencyInjection.cs +++ b/Infrastructure/Identity/KeycloakDependencyInjection.cs @@ -1,4 +1,5 @@ -using Microsoft.Extensions.Configuration; +using Keycloak.Net; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Musify.Application.Contracts.Infrastructure; using Musify.Infrastructure.Configuration; @@ -11,6 +12,13 @@ namespace Musify.Infrastructure.Identity { var keycloakConfiguration = KeycloakConfiguration.Load(configuration); serviceDescriptors.AddSingleton(keycloakConfiguration); + serviceDescriptors.AddScoped(serviceProvider => + { + return new KeycloakClient( + keycloakConfiguration.BaseUrl, + keycloakConfiguration.Username, + keycloakConfiguration.Password); + } ); serviceDescriptors.AddScoped(); } } diff --git a/Infrastructure/Infrastructure.csproj b/Infrastructure/Infrastructure.csproj index 75091d6..3bc091b 100644 --- a/Infrastructure/Infrastructure.csproj +++ b/Infrastructure/Infrastructure.csproj @@ -5,6 +5,7 @@ enable enable Musify.Infrastructure + 07d419fc-9ade-471a-bc0e-aebece785b30 @@ -19,6 +20,7 @@ + diff --git a/Infrastructure/Messaging/Consumers/RemoveFileConsumer.cs b/Infrastructure/Messaging/Consumers/RemoveFileConsumer.cs index ce79d4f..3c86b06 100644 --- a/Infrastructure/Messaging/Consumers/RemoveFileConsumer.cs +++ b/Infrastructure/Messaging/Consumers/RemoveFileConsumer.cs @@ -28,12 +28,14 @@ namespace Musify.Infrastructure.Messaging.Consumers Payload = payload }; await database.Jobs.AddAsync(job, consumeContext.CancellationToken); + logger.LogInformation("Created new job with id {JobId} for removing file {BucketName}/{KeyName}", job.Id, consumeContext.Message.BucketName, consumeContext.Message.KeyName); } else { job.RetryCount++; job.JobState = JobState.Pending; database.Jobs.Update(job); + logger.LogInformation("Retrying job with id {JobId} for removing file {BucketName}/{KeyName}. Retry count: {RetryCount}", job.Id, consumeContext.Message.BucketName, consumeContext.Message.KeyName, job.RetryCount); } var removeFile = await storageHandler.RemoveFileAsync( @@ -42,7 +44,15 @@ namespace Musify.Infrastructure.Messaging.Consumers consumeContext.CancellationToken); if (!removeFile.IsSuccess) + { job.JobState = JobState.Failed; + logger.LogInformation("Failed to remove file {BucketName}/{KeyName} for job with id {JobId}. Error: {ErrorMessage}", consumeContext.Message.BucketName, consumeContext.Message.KeyName, job.Id, string.Join("; ", removeFile.Errors)); + } + else + { + job.CompletedAt = DateTime.UtcNow; + logger.LogInformation("Successfully removed file {BucketName}/{KeyName} for job with id {JobId}.", consumeContext.Message.BucketName, consumeContext.Message.KeyName, job.Id); + } await database.SaveChangesAsync(consumeContext.CancellationToken); } diff --git a/Infrastructure/Persistence/DatabaseDependencyInjection.cs b/Infrastructure/Persistence/DatabaseDependencyInjection.cs index f924e98..349e91c 100644 --- a/Infrastructure/Persistence/DatabaseDependencyInjection.cs +++ b/Infrastructure/Persistence/DatabaseDependencyInjection.cs @@ -1,5 +1,4 @@ -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Musify.Application.Contracts.Infrastructure; @@ -9,14 +8,7 @@ namespace Musify.Infrastructure.Persistence { public static void AddDatabase(this IServiceCollection serviceDescriptors, IConfiguration configuration) { - var connectionString = configuration.GetConnectionString("Default") - ?? throw new InvalidOperationException("Default Connection connection string not found."); - - serviceDescriptors.AddDbContext(options => - { - options.UseNpgsql(connectionString); - } ); - + serviceDescriptors.AddDbContext(); serviceDescriptors.AddScoped(serviceProvider => serviceProvider.GetRequiredService()); } } diff --git a/Infrastructure/Persistence/DatabaseDesignTimeFactory.cs b/Infrastructure/Persistence/DatabaseDesignTimeFactory.cs index b1a3695..5568178 100644 --- a/Infrastructure/Persistence/DatabaseDesignTimeFactory.cs +++ b/Infrastructure/Persistence/DatabaseDesignTimeFactory.cs @@ -12,6 +12,7 @@ namespace Musify.Infrastructure.Persistence var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("DesignSettings.json") + .AddUserSecrets() .Build(); var databaseConfiguration = DatabaseConfiguration.Load(configuration);