This commit is contained in:
2026-03-19 10:41:32 +01:00
parent d9cb715622
commit 4996fd019e
7 changed files with 27 additions and 14 deletions
@@ -62,7 +62,7 @@ namespace Musify.Application.Configuration
public string PresetSmallPicture { get; set; } = "PresetSmallPicture.webp"; 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"; public string PresetLargePicture { get; set; } = "PresetLargePicture.webp";
} }
@@ -33,14 +33,14 @@ namespace Musify.Application.PlayLists.Commands.CreatePlayList
Name = request.Name, Name = request.Name,
NormalizedName = request.Name.Trim().ToUpperInvariant(), NormalizedName = request.Name.Trim().ToUpperInvariant(),
Description = request.Description, Description = request.Description,
OriginalPictureKeyName = $"{imageId}.{request.PictureFileType}", OriginalPictureKeyName = $"{imageId}{request.PictureFileType}",
SmallPictureKeyName = playListConfiguration.Routes.PresetSmallPicture, SmallPictureKeyName = playListConfiguration.Routes.PresetSmallPicture,
MediumPictureKeyName = playListConfiguration.Routes.PresetMediumPicture, MediumPictureKeyName = playListConfiguration.Routes.PresetMediumPicture,
LargePictureKeyName = playListConfiguration.Routes.PresetLargePicture, LargePictureKeyName = playListConfiguration.Routes.PresetLargePicture,
}; };
await database.PlayLists.AddAsync(playList, cancellationToken); 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( var uploadResult = await storageHandler.UploadFileAsync(
request.PictureStream, request.PictureStream,
@@ -1,4 +1,5 @@
using Microsoft.Extensions.Configuration; using Keycloak.Net;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Musify.Application.Contracts.Infrastructure; using Musify.Application.Contracts.Infrastructure;
using Musify.Infrastructure.Configuration; using Musify.Infrastructure.Configuration;
@@ -11,6 +12,13 @@ namespace Musify.Infrastructure.Identity
{ {
var keycloakConfiguration = KeycloakConfiguration.Load(configuration); var keycloakConfiguration = KeycloakConfiguration.Load(configuration);
serviceDescriptors.AddSingleton(keycloakConfiguration); serviceDescriptors.AddSingleton(keycloakConfiguration);
serviceDescriptors.AddScoped(serviceProvider =>
{
return new KeycloakClient(
keycloakConfiguration.BaseUrl,
keycloakConfiguration.Username,
keycloakConfiguration.Password);
} );
serviceDescriptors.AddScoped<IKeycloakUserClient, KeycloakIdentityService>(); serviceDescriptors.AddScoped<IKeycloakUserClient, KeycloakIdentityService>();
} }
} }
+2
View File
@@ -5,6 +5,7 @@
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<RootNamespace>Musify.Infrastructure</RootNamespace> <RootNamespace>Musify.Infrastructure</RootNamespace>
<UserSecretsId>07d419fc-9ade-471a-bc0e-aebece785b30</UserSecretsId>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
@@ -19,6 +20,7 @@
</PackageReference> </PackageReference>
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="10.0.5" /> <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="10.0.5" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.5" /> <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.5" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="6.0.1" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="10.0.1" /> <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="10.0.1" />
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.12" /> <PackageReference Include="SixLabors.ImageSharp" Version="3.1.12" />
</ItemGroup> </ItemGroup>
@@ -28,12 +28,14 @@ namespace Musify.Infrastructure.Messaging.Consumers
Payload = payload Payload = payload
}; };
await database.Jobs.AddAsync(job, consumeContext.CancellationToken); 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 else
{ {
job.RetryCount++; job.RetryCount++;
job.JobState = JobState.Pending; job.JobState = JobState.Pending;
database.Jobs.Update(job); 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( var removeFile = await storageHandler.RemoveFileAsync(
@@ -42,7 +44,15 @@ namespace Musify.Infrastructure.Messaging.Consumers
consumeContext.CancellationToken); consumeContext.CancellationToken);
if (!removeFile.IsSuccess) if (!removeFile.IsSuccess)
{
job.JobState = JobState.Failed; 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); await database.SaveChangesAsync(consumeContext.CancellationToken);
} }
@@ -1,5 +1,4 @@
using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Musify.Application.Contracts.Infrastructure; using Musify.Application.Contracts.Infrastructure;
@@ -9,14 +8,7 @@ namespace Musify.Infrastructure.Persistence
{ {
public static void AddDatabase(this IServiceCollection serviceDescriptors, IConfiguration configuration) public static void AddDatabase(this IServiceCollection serviceDescriptors, IConfiguration configuration)
{ {
var connectionString = configuration.GetConnectionString("Default") serviceDescriptors.AddDbContext<Database>();
?? throw new InvalidOperationException("Default Connection connection string not found.");
serviceDescriptors.AddDbContext<Database>(options =>
{
options.UseNpgsql(connectionString);
} );
serviceDescriptors.AddScoped<IDatabase>(serviceProvider => serviceProvider.GetRequiredService<Database>()); serviceDescriptors.AddScoped<IDatabase>(serviceProvider => serviceProvider.GetRequiredService<Database>());
} }
} }
@@ -12,6 +12,7 @@ namespace Musify.Infrastructure.Persistence
var configuration = new ConfigurationBuilder() var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory()) .SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("DesignSettings.json") .AddJsonFile("DesignSettings.json")
.AddUserSecrets<DatabaseDesignTimeFactory>()
.Build(); .Build();
var databaseConfiguration = DatabaseConfiguration.Load(configuration); var databaseConfiguration = DatabaseConfiguration.Load(configuration);