From 5761f6da693d6f405ccc5c06d2d328985d745fe6 Mon Sep 17 00:00:00 2001 From: XShine555 Date: Sat, 9 May 2026 19:36:49 +0200 Subject: [PATCH] Remove keycloak and add missing functions --- .../Application/PaginatedResponse.cs | 19 +++++- .../Infrastructure/IKeycloakUserService.cs | 21 ------ .../GetPlayListsByUserIdQueryHandler.cs | 11 +-- .../Handlers/GetPlayListsQueryHandler.cs | 11 +-- .../Handler/CreateTrackCommandHandler.cs | 2 +- .../Handler/GetTracksByUserIdQueryHandler.cs | 11 +-- .../Tracks/Handler/GetTracksQueryHandler.cs | 12 +--- .../Users/Commands/CreateUserCommand.cs | 11 ++- .../Users/Commands/DeleteUserCommand.cs | 8 --- .../Handlers/CreateUserCommandHandler.cs | 20 +----- .../Handlers/DeleteUserCommandHandler.cs | 22 ------ .../Users/Handlers/GetUserByIdQueryHandler.cs | 23 +------ .../Handlers/GetUserByKeycloakQueryHandler.cs | 23 +------ .../Users/Handlers/GetUsersQueryHandler.cs | 52 +++++--------- Application/Users/Responses/UserResponse.cs | 24 +++++-- Domain/Entities/User.cs | 14 ++++ .../InfrastructureStorageConfiguration.cs | 4 +- .../Configuration/KeycloakConfiguration.cs | 21 ------ .../OpenTelemetryConfiguration.cs | 2 +- Infrastructure/Infrastructure.csproj | 1 - .../Services/KeycloakUserService.cs | 67 ------------------- .../Services/ServicesDependencyInjection.cs | 23 ------- 22 files changed, 89 insertions(+), 313 deletions(-) delete mode 100644 Application/Contracts/Infrastructure/IKeycloakUserService.cs delete mode 100644 Application/Users/Commands/DeleteUserCommand.cs delete mode 100644 Application/Users/Handlers/DeleteUserCommandHandler.cs delete mode 100644 Infrastructure/Configuration/KeycloakConfiguration.cs delete mode 100644 Infrastructure/Services/KeycloakUserService.cs diff --git a/Application/Contracts/Application/PaginatedResponse.cs b/Application/Contracts/Application/PaginatedResponse.cs index 8106a4b..9f9b5ac 100644 --- a/Application/Contracts/Application/PaginatedResponse.cs +++ b/Application/Contracts/Application/PaginatedResponse.cs @@ -1,4 +1,6 @@ -namespace Musify.Application.Contracts.Application +using X.PagedList; + +namespace Musify.Application.Contracts.Application { public record PaginatedResponse( IReadOnlyCollection Items, @@ -7,5 +9,18 @@ int PageCount, int TotalItemCount, bool HasNextPage, - bool HasPreviousPage); + bool HasPreviousPage) + { + public static PaginatedResponse FromPagedList(IPagedList pagedList) + { + return new PaginatedResponse( + pagedList.ToArray(), + pagedList.PageNumber, + pagedList.PageSize, + pagedList.PageCount, + pagedList.TotalItemCount, + pagedList.HasNextPage, + pagedList.HasPreviousPage); + } + } } diff --git a/Application/Contracts/Infrastructure/IKeycloakUserService.cs b/Application/Contracts/Infrastructure/IKeycloakUserService.cs deleted file mode 100644 index d11728b..0000000 --- a/Application/Contracts/Infrastructure/IKeycloakUserService.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Musify.Application.Users.Responses; - -namespace Musify.Application.Contracts.Infrastructure -{ - public interface IKeycloakUserService - { - Task GetUserByIdAsync(string keycloakId, CancellationToken cancellationToken); - - Task> GetUsersAsync( - CancellationToken cancellationToken, - string search = "", - int first = 0, - int max = 20, - string username = ""); - - Task GetUsersCountAsync( - CancellationToken cancellationToken, - string search = "", - string username = ""); - } -} \ No newline at end of file diff --git a/Application/PlayLists/Handlers/GetPlayListsByUserIdQueryHandler.cs b/Application/PlayLists/Handlers/GetPlayListsByUserIdQueryHandler.cs index 29ea4cf..3803418 100644 --- a/Application/PlayLists/Handlers/GetPlayListsByUserIdQueryHandler.cs +++ b/Application/PlayLists/Handlers/GetPlayListsByUserIdQueryHandler.cs @@ -32,16 +32,7 @@ namespace Musify.Application.PlayLists.Handlers .Select(p => PlayListResponse.FromEntity(p)) .ToPagedListAsync(pageNumber, pageSize, totalCount, cancellationToken); - var response = new PaginatedResponse( - pagedPlayLists.ToArray(), - pagedPlayLists.PageNumber, - pagedPlayLists.PageSize, - pagedPlayLists.PageCount, - pagedPlayLists.TotalItemCount, - pagedPlayLists.HasNextPage, - pagedPlayLists.HasPreviousPage); - - return Result.Success(response); + return Result.Success(PaginatedResponse.FromPagedList(pagedPlayLists)); } } } \ No newline at end of file diff --git a/Application/PlayLists/Handlers/GetPlayListsQueryHandler.cs b/Application/PlayLists/Handlers/GetPlayListsQueryHandler.cs index 308d32b..7eb435c 100644 --- a/Application/PlayLists/Handlers/GetPlayListsQueryHandler.cs +++ b/Application/PlayLists/Handlers/GetPlayListsQueryHandler.cs @@ -25,16 +25,7 @@ namespace Musify.Application.PlayLists.Handlers .Select(p => PlayListResponse.FromEntity(p)) .ToPagedListAsync(pageNumber, pageSize, totalCount, cancellationToken); - var response = new PaginatedResponse( - pagedPlayLists.ToArray(), - pagedPlayLists.PageNumber, - pagedPlayLists.PageSize, - pagedPlayLists.PageCount, - pagedPlayLists.TotalItemCount, - pagedPlayLists.HasNextPage, - pagedPlayLists.HasPreviousPage); - - return Result.Success(response); + return Result.Success(PaginatedResponse.FromPagedList(pagedPlayLists)); } } } \ No newline at end of file diff --git a/Application/Tracks/Handler/CreateTrackCommandHandler.cs b/Application/Tracks/Handler/CreateTrackCommandHandler.cs index 68c79ec..1144f76 100644 --- a/Application/Tracks/Handler/CreateTrackCommandHandler.cs +++ b/Application/Tracks/Handler/CreateTrackCommandHandler.cs @@ -42,7 +42,7 @@ namespace Musify.Application.Tracks.Handler await database.Tracks.AddAsync(trackEntity, cancellationToken); await database.SaveChangesAsync(cancellationToken); - return Result.Success(); + return Result.Created(TrackResponse.FromEntity(trackEntity)); } async Task UploadFilesAsync( diff --git a/Application/Tracks/Handler/GetTracksByUserIdQueryHandler.cs b/Application/Tracks/Handler/GetTracksByUserIdQueryHandler.cs index 54b8973..3b107c6 100644 --- a/Application/Tracks/Handler/GetTracksByUserIdQueryHandler.cs +++ b/Application/Tracks/Handler/GetTracksByUserIdQueryHandler.cs @@ -33,16 +33,7 @@ namespace Musify.Application.Tracks.Handler .Select(t => TrackResponse.FromEntity(t.Track)) .ToPagedListAsync(pageNumber, pageSize, totalCount, cancellationToken); - var response = new PaginatedResponse( - pagedTracks.ToArray(), - pagedTracks.PageNumber, - pagedTracks.PageSize, - pagedTracks.PageCount, - pagedTracks.TotalItemCount, - pagedTracks.HasNextPage, - pagedTracks.HasPreviousPage); - - return Result.Success(response); + return Result.Success(PaginatedResponse.FromPagedList(pagedTracks)); } } } \ No newline at end of file diff --git a/Application/Tracks/Handler/GetTracksQueryHandler.cs b/Application/Tracks/Handler/GetTracksQueryHandler.cs index 7cc21cb..8fc47f9 100644 --- a/Application/Tracks/Handler/GetTracksQueryHandler.cs +++ b/Application/Tracks/Handler/GetTracksQueryHandler.cs @@ -18,7 +18,6 @@ namespace Musify.Application.Tracks.Handler var pageSize = request.PageSize < 1 ? 10 : request.PageSize; var totalCount = await database.PlayLists.CountAsync(cancellationToken); - var pagedPlayLists = await database.UserHasTracks .AsNoTracking() .OrderBy(t => t.Id) @@ -26,16 +25,7 @@ namespace Musify.Application.Tracks.Handler .Select(t => TrackResponse.FromEntity(t.Track)) .ToPagedListAsync(pageNumber, pageSize, totalCount, cancellationToken); - var response = new PaginatedResponse( - pagedPlayLists.ToArray(), - pagedPlayLists.PageNumber, - pagedPlayLists.PageSize, - pagedPlayLists.PageCount, - pagedPlayLists.TotalItemCount, - pagedPlayLists.HasNextPage, - pagedPlayLists.HasPreviousPage); - - return Result.Success(response); + return Result.Success(PaginatedResponse.FromPagedList(pagedPlayLists)); } } } \ No newline at end of file diff --git a/Application/Users/Commands/CreateUserCommand.cs b/Application/Users/Commands/CreateUserCommand.cs index 2f7d89b..1b0224e 100644 --- a/Application/Users/Commands/CreateUserCommand.cs +++ b/Application/Users/Commands/CreateUserCommand.cs @@ -5,14 +5,21 @@ using Musify.Domain.Entities; namespace Musify.Application.Users.Commands { - public record CreateUserCommand(Guid Id) + public record CreateUserCommand(Guid Id, + string Name, + string? FirstName, + string? SecondName) : ICommand> { public static User ToEntity(CreateUserCommand command) { return new User { - Id = command.Id + Id = command.Id, + Name = command.Name, + NormalizedName = command.Name.ToUpperInvariant(), + FirstName = command.FirstName, + SecondName = command.SecondName }; } } diff --git a/Application/Users/Commands/DeleteUserCommand.cs b/Application/Users/Commands/DeleteUserCommand.cs deleted file mode 100644 index 5a64998..0000000 --- a/Application/Users/Commands/DeleteUserCommand.cs +++ /dev/null @@ -1,8 +0,0 @@ -using Ardalis.Result; -using Mediator; - -namespace Musify.Application.Users.Commands -{ - public record DeleteUserCommand(Guid Id) - : ICommand; -} \ No newline at end of file diff --git a/Application/Users/Handlers/CreateUserCommandHandler.cs b/Application/Users/Handlers/CreateUserCommandHandler.cs index aae7176..9d9e097 100644 --- a/Application/Users/Handlers/CreateUserCommandHandler.cs +++ b/Application/Users/Handlers/CreateUserCommandHandler.cs @@ -8,7 +8,7 @@ using Musify.Application.Users.Responses; namespace Musify.Application.Users.Handlers { - public class CreateUserCommandHandler(IDatabase database, IKeycloakUserService keycloakUserClient, ILogger logger) + public class CreateUserCommandHandler(IDatabase database, ILogger logger) : ICommandHandler > { public async ValueTask> Handle(CreateUserCommand request, CancellationToken cancellationToken) @@ -20,28 +20,12 @@ namespace Musify.Application.Users.Handlers return Result.Conflict($"User {request.Id} already exists"); } - KeycloakUserResponse keycloakUser; - try - { - keycloakUser = await keycloakUserClient.GetUserByIdAsync(request.Id.ToString(), cancellationToken); - } - catch - { - return Result.NotFound("Keycloak user not found"); - } - var newUser = CreateUserCommand.ToEntity(request); await database.Users.AddAsync(newUser, cancellationToken); await database.SaveChangesAsync(cancellationToken); logger.LogInformation("Created user {UserId}", newUser.Id); - return Result.Created(new UserResponse( - newUser.Id.ToString(), - keycloakUser.Name, - keycloakUser.FirstName, - keycloakUser.SecondName, - newUser.CreatedAt, - newUser.UpdatedAt)); + return Result.Created(UserResponse.FromEntity(newUser)); } } } \ No newline at end of file diff --git a/Application/Users/Handlers/DeleteUserCommandHandler.cs b/Application/Users/Handlers/DeleteUserCommandHandler.cs deleted file mode 100644 index 86d9c62..0000000 --- a/Application/Users/Handlers/DeleteUserCommandHandler.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Ardalis.Result; -using Mediator; -using Musify.Application.Contracts.Infrastructure; - -namespace Musify.Application.Users.Commands -{ - public class DeleteUserCommandHandler(IDatabase database) - : ICommandHandler - { - public async ValueTask Handle(DeleteUserCommand request, CancellationToken cancellationToken) - { - var existingUser = await database.Users.FindAsync(request.Id, cancellationToken); - if (existingUser is null) - return Result.NotFound(); - - database.Users.Remove(existingUser); - await database.SaveChangesAsync(cancellationToken); - - return Result.NoContent(); - } - } -} \ No newline at end of file diff --git a/Application/Users/Handlers/GetUserByIdQueryHandler.cs b/Application/Users/Handlers/GetUserByIdQueryHandler.cs index bc9a311..fe92751 100644 --- a/Application/Users/Handlers/GetUserByIdQueryHandler.cs +++ b/Application/Users/Handlers/GetUserByIdQueryHandler.cs @@ -7,34 +7,17 @@ using Musify.Application.Users.Responses; namespace Musify.Application.Users.Handlers { - public class GetUserByIdQueryHandler(IDatabase database, IKeycloakUserService keycloakUserClient) + public class GetUserByIdQueryHandler(IDatabase database) : IQueryHandler > { public async ValueTask> Handle(GetUserByIdQuery request, CancellationToken cancellationToken) { var user = await database.Users .AsNoTracking() + .Select(u => UserResponse.FromEntity(u)) .SingleOrDefaultAsync(u => u.Id == request.Id, cancellationToken); - if (user is null) - return Result.NotFound("User not found"); - KeycloakUserResponse keycloakUser; - try - { - keycloakUser = await keycloakUserClient.GetUserByIdAsync(user.Id.ToString(), cancellationToken); - } - catch - { - return Result.Error("Keycloak user not found"); - } - - return Result.Success(new UserResponse( - user.Id.ToString(), - keycloakUser.Name, - keycloakUser.FirstName, - keycloakUser.SecondName, - user.CreatedAt, - user.UpdatedAt)); + return user ?? Result.NotFound(); } } } \ No newline at end of file diff --git a/Application/Users/Handlers/GetUserByKeycloakQueryHandler.cs b/Application/Users/Handlers/GetUserByKeycloakQueryHandler.cs index 4dbd18b..f46fb00 100644 --- a/Application/Users/Handlers/GetUserByKeycloakQueryHandler.cs +++ b/Application/Users/Handlers/GetUserByKeycloakQueryHandler.cs @@ -7,34 +7,17 @@ using Musify.Application.Users.Responses; namespace Musify.Application.Users.Handlers { - public class GetUserByKeycloakQueryHandler(IDatabase database, IKeycloakUserService keycloakUserClient) + public class GetUserByKeycloakQueryHandler(IDatabase database) : IQueryHandler > { public async ValueTask> Handle(GetUserByKeycloakQuery request, CancellationToken cancellationToken) { var user = await database.Users .AsNoTracking() + .Select(u => UserResponse.FromEntity(u)) .SingleOrDefaultAsync(u => u.Id == request.Id, cancellationToken); - if (user is null) - return Result.NotFound("User not found"); - KeycloakUserResponse keycloakUser; - try - { - keycloakUser = await keycloakUserClient.GetUserByIdAsync(user.Id.ToString(), cancellationToken); - } - catch - { - return Result.NotFound("Keycloak user not found"); - } - - return Result.Success(new UserResponse( - user.Id.ToString(), - keycloakUser.Name, - keycloakUser.FirstName, - keycloakUser.SecondName, - user.CreatedAt, - user.UpdatedAt)); + return user ?? Result.NotFound(); } } } diff --git a/Application/Users/Handlers/GetUsersQueryHandler.cs b/Application/Users/Handlers/GetUsersQueryHandler.cs index d52a32e..3f807d8 100644 --- a/Application/Users/Handlers/GetUsersQueryHandler.cs +++ b/Application/Users/Handlers/GetUsersQueryHandler.cs @@ -5,12 +5,12 @@ using Musify.Application.Contracts.Application; using Musify.Application.Contracts.Infrastructure; using Musify.Application.Users.Queries; using Musify.Application.Users.Responses; -using X.PagedList; +using X.PagedList.EF; using X.PagedList.Extensions; namespace Musify.Application.Users.Handlers { - public class GetUsersQueryHandler(IDatabase database, IKeycloakUserService keycloakUserClient) + public class GetUsersQueryHandler(IDatabase database) : IQueryHandler > > { public async ValueTask >> Handle(GetUsersQuery request, CancellationToken cancellationToken) @@ -19,43 +19,21 @@ namespace Musify.Application.Users.Handlers var pageSize = request.PageSize < 1 ? 10 : request.PageSize; var first = (pageNumber - 1) * pageSize; - var keycloakUsers = await keycloakUserClient.GetUsersAsync( - cancellationToken, - first: first, - max: pageSize, - search: request.UsernameSearch); + var user = database.Users + .AsNoTracking() + .AsQueryable(); + if (!string.IsNullOrEmpty(request.UsernameSearch)) + { + var normalizedUsername = request.UsernameSearch.Trim().ToUpperInvariant(); + user = user.Where(u => u.NormalizedName.Contains(normalizedUsername)); + } - var keycloakIds = keycloakUsers.Select(u => u.Id).ToList(); + var totalCount = await user.CountAsync(cancellationToken); + var pagedUser = await user + .Select(u => UserResponse.FromEntity(u)) + .ToPagedListAsync(pageNumber, pageSize, totalCount, cancellationToken); - var databaseUsers = await database.Users - .Where(u => keycloakIds.Contains(u.Id)) - .ToListAsync(cancellationToken); - - var users = databaseUsers - .Join(keycloakUsers, db => db.Id, kc => kc.Id, - (databaseSource, keycloakSource) => new UserResponse( - keycloakSource.Id.ToString(), - keycloakSource.Name, - keycloakSource.FirstName, - keycloakSource.SecondName, - databaseSource.CreatedAt, - databaseSource.UpdatedAt)) - .ToArray(); - - var totalItemCount = await keycloakUserClient.GetUsersCountAsync(cancellationToken, search: request.UsernameSearch); - - var pagedUsers = new StaticPagedList(users, pageNumber, pageSize, totalItemCount); - - var response = new PaginatedResponse( - pagedUsers.ToArray(), - pagedUsers.PageNumber, - pagedUsers.PageSize, - pagedUsers.PageCount, - pagedUsers.TotalItemCount, - pagedUsers.HasNextPage, - pagedUsers.HasPreviousPage); - - return Result.Success(response); + return Result.Success(PaginatedResponse.FromPagedList(pagedUser)); } } } \ No newline at end of file diff --git a/Application/Users/Responses/UserResponse.cs b/Application/Users/Responses/UserResponse.cs index 758153f..054af69 100644 --- a/Application/Users/Responses/UserResponse.cs +++ b/Application/Users/Responses/UserResponse.cs @@ -1,10 +1,24 @@ -namespace Musify.Application.Users.Responses +using Musify.Domain.Entities; + +namespace Musify.Application.Users.Responses { public record UserResponse( - string Id, + Guid Id, string Name, - string FirstName, - string SecondName, + string? FirstName, + string? SecondName, DateTime CreatedAt, - DateTime UpdatedAt); + DateTime UpdatedAt) + { + public static UserResponse FromEntity(User user) + { + return new UserResponse( + user.Id, + user.Name, + user.FirstName, + user.SecondName, + user.CreatedAt, + user.UpdatedAt); + } + } } \ No newline at end of file diff --git a/Domain/Entities/User.cs b/Domain/Entities/User.cs index eca06c3..c0be246 100644 --- a/Domain/Entities/User.cs +++ b/Domain/Entities/User.cs @@ -9,6 +9,20 @@ namespace Musify.Domain.Entities [Key] public required Guid Id { get; set; } + [Required] + [MaxLength(48)] + public required string Name { get; set; } + + [Required] + [MaxLength(48)] + public required string NormalizedName { get; set; } + + [MaxLength(48)] + public string? FirstName { get; set; } + + [MaxLength(48)] + public string? SecondName { get; set; } + [Required] public DateTime CreatedAt { get; set; } = DateTime.UtcNow; diff --git a/Infrastructure/Configuration/InfrastructureStorageConfiguration.cs b/Infrastructure/Configuration/InfrastructureStorageConfiguration.cs index 4321c01..2c2afb7 100644 --- a/Infrastructure/Configuration/InfrastructureStorageConfiguration.cs +++ b/Infrastructure/Configuration/InfrastructureStorageConfiguration.cs @@ -6,16 +6,14 @@ namespace Musify.Infrastructure.Configuration { public const string SectionName = "InfrastructureStorage"; - [Required] [Url] + [Required] public required string Address { get; set; } [Required] - [MinLength(3)] public required string AccessKey { get; set; } [Required] - [MinLength(8)] public required string SecretAccessKey { get; set; } [Required] diff --git a/Infrastructure/Configuration/KeycloakConfiguration.cs b/Infrastructure/Configuration/KeycloakConfiguration.cs deleted file mode 100644 index 7c1e1d4..0000000 --- a/Infrastructure/Configuration/KeycloakConfiguration.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace Musify.Infrastructure.Configuration -{ - public class KeycloakConfiguration - { - public const string SectionName = "Keycloak"; - - [Required] - public required string Address { get; set; } - - [Required] - public required string Realm { get; set; } - - [Required] - public required string Username { get; set; } - - [Required] - public required string Password { get; set; } - } -} \ No newline at end of file diff --git a/Infrastructure/Configuration/OpenTelemetryConfiguration.cs b/Infrastructure/Configuration/OpenTelemetryConfiguration.cs index ad7a232..e435db1 100644 --- a/Infrastructure/Configuration/OpenTelemetryConfiguration.cs +++ b/Infrastructure/Configuration/OpenTelemetryConfiguration.cs @@ -6,8 +6,8 @@ namespace Musify.Infrastructure.Configuration { public const string SectionName = "OpenTelemetry"; - [Required] [Url] + [Required] public required string OtlpEndpoint { get; set; } } } diff --git a/Infrastructure/Infrastructure.csproj b/Infrastructure/Infrastructure.csproj index 8c26de5..30d947b 100644 --- a/Infrastructure/Infrastructure.csproj +++ b/Infrastructure/Infrastructure.csproj @@ -15,7 +15,6 @@ - diff --git a/Infrastructure/Services/KeycloakUserService.cs b/Infrastructure/Services/KeycloakUserService.cs deleted file mode 100644 index 8705aeb..0000000 --- a/Infrastructure/Services/KeycloakUserService.cs +++ /dev/null @@ -1,67 +0,0 @@ -using Keycloak.Net; -using Keycloak.Net.Models.Users; -using Microsoft.Extensions.Logging; -using Musify.Application.Contracts.Infrastructure; -using Musify.Application.Users.Responses; -using Musify.Infrastructure.Configuration; - -namespace Musify.Infrastructure.Services -{ - public class KeycloakUserService(KeycloakClient keycloakClient, ILogger logger, - KeycloakConfiguration keycloakConfiguration) : IKeycloakUserService - { - public async Task GetUserByIdAsync(string keycloakId, CancellationToken cancellationToken) - { - User keycloakUser; - - try - { - keycloakUser = await keycloakClient.GetUserAsync(keycloakConfiguration.Realm, keycloakId, cancellationToken); - } - catch (OperationCanceledException) - { - logger.LogWarning("Operation to retrieve Keycloak user {KeycloakId} was cancelled", keycloakId); - throw; - } - catch (Exception exception) - { - logger.LogWarning(exception, "Failed to retrieve Keycloak user {KeycloakId}", keycloakId); - throw; - } - return ToResponse(keycloakUser); - } - - public async Task> GetUsersAsync(CancellationToken cancellationToken, string search = "", int first = 0, int max = 20, string username = "") - { - var users = await keycloakClient.GetUsersAsync( - realm: keycloakConfiguration.Realm, - first: first, - max: max, - search: search, - username: username, - cancellationToken: cancellationToken); - - return users - .Select(ToResponse) - .ToArray(); - } - - public Task GetUsersCountAsync(CancellationToken cancellationToken, string search = "", string username = "") - { - return keycloakClient.GetUsersCountAsync( - keycloakConfiguration.Realm, - search: search, - username: username, - cancellationToken: cancellationToken); - } - - KeycloakUserResponse ToResponse(User keycloakUser) - { - return new KeycloakUserResponse( - Guid.Parse(keycloakUser.Id ?? throw new InvalidOperationException("Keycloak user Id is required.")), - keycloakUser.UserName ?? throw new InvalidOperationException("Keycloak user Name is required."), - keycloakUser.FirstName ?? throw new InvalidOperationException("Keycloak user FirstName is required."), - keycloakUser.LastName ?? throw new InvalidOperationException("Keycloak user SecondName is required.")); - } - } -} \ No newline at end of file diff --git a/Infrastructure/Services/ServicesDependencyInjection.cs b/Infrastructure/Services/ServicesDependencyInjection.cs index 8b13651..6d76ccf 100644 --- a/Infrastructure/Services/ServicesDependencyInjection.cs +++ b/Infrastructure/Services/ServicesDependencyInjection.cs @@ -1,5 +1,4 @@ using Amazon.S3; -using Keycloak.Net; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; @@ -42,28 +41,6 @@ namespace Musify.Infrastructure.Services return serviceDescriptors; } - public static IServiceCollection AddKeycloakService(this IServiceCollection serviceDescriptors, IConfiguration configuration) - { - serviceDescriptors.AddOptionsWithValidateOnStart() - .Bind(configuration.GetRequiredSection(KeycloakConfiguration.SectionName)) - .ValidateDataAnnotations(); - - serviceDescriptors.AddSingleton(serviceProvider => - serviceProvider.GetRequiredService>().Value); - - serviceDescriptors.AddScoped(serviceProvider => - { - var keycloakConfiguration = serviceProvider.GetRequiredService(); - - return new KeycloakClient( - keycloakConfiguration.Address, - keycloakConfiguration.Username, - keycloakConfiguration.Password); - } ); - serviceDescriptors.AddScoped(); - return serviceDescriptors; - } - public static IServiceCollection AddAudioTranscoder(this IServiceCollection serviceDescriptors, IConfiguration configuration) { serviceDescriptors