From bfdd340c0ad089c95bc5efa398b91f29eb87c609 Mon Sep 17 00:00:00 2001 From: Haik Date: Tue, 23 Jul 2024 15:17:52 +0400 Subject: [PATCH] bug fix --- .editorconfig | 45 +++++- Directory.Packages.props | 137 +++++++++--------- .../Endpoints/Users/UserEndpoints.cs | 7 +- .../Extensions/SwaggerExtension.cs | 5 +- .../appsettings.Development.json | 3 +- .../appsettings.Local.json | 3 +- .../appsettings.Production.json | 3 +- .../appsettings.QA.json | 3 +- .../IdentityStateCommandResponse.cs | 3 - .../Contracts/Login/LoginCommandResponse.cs | 2 - .../RefreshTokenCommandResponse.cs | 2 - .../Application/Delete/DeleteUsersCommand.cs | 7 +- .../Delete/DeleteUsersCommandHandler.cs | 19 +-- .../Delete/DeleteUsersCommandValidator.cs | 13 -- .../GetUsers/GetUsersQueryHandler.cs | 4 +- .../UpdateStatus/UpdateUserStatusCommand.cs | 2 - .../Contracts/GetById/GetUserQueryResponse.cs | 2 - .../EntityRepositories/IUserRepository.cs | 3 + .../Pandatech.CleanArchitecture.Core.csproj | 1 - .../EntityFilters/UserEntityFilters.cs | 6 +- .../DependencyInjection.cs | 5 +- .../Extensions/CryptoExtensions.cs | 2 - .../Helpers/ConfigurationPaths.cs | 1 - .../EntityRepositories/UserRepository.cs | 25 ++++ 24 files changed, 158 insertions(+), 145 deletions(-) delete mode 100644 src/Pandatech.CleanArchitecture.Application/Features/User/Application/Delete/DeleteUsersCommandValidator.cs diff --git a/.editorconfig b/.editorconfig index 7bb7bbe..dd3a701 100644 --- a/.editorconfig +++ b/.editorconfig @@ -131,7 +131,7 @@ tab_width = 4 ######################### # Custom added settings # ######################### - +[*.cs] dotnet_diagnostic.cs8600.severity = error #Converting null literal or possible null value to non-nullable type. dotnet_diagnostic.cs8601.severity = error #Possible null reference assignment. dotnet_diagnostic.cs8602.severity = error #possible dereference of a null reference @@ -145,5 +145,46 @@ dotnet_diagnostic.cs1717.severity = error #variable is assigned to itself dotnet_diagnostic.cs1718.severity = error #comparison made to same variable dotnet_diagnostic.cs0659.severity = error #overriding object.Equals but not overriding object.GetHashCode dotnet_diagnostic.cs0251.severity = error #Indexing an array with a negative index (array indices always start at zero) +dotnet_diagnostic.s3363.severity = none #Never set DateTime as PrimaryKey. Ignored as we never do it but have warnings for cache entities. +dotnet_diagnostic.ca2016.severity = error #Forwarding cancellation tokens +csharp_style_namespace_declarations = file_scoped:error +resharper_entity_framework_model_validation_unlimited_string_length_highlighting = none + +######################### +# VS added settings # +######################### + +[*.cs] csharp_style_namespace_declarations = file_scoped:error -resharper_entity_framework_model_validation_unlimited_string_length_highlighting = none \ No newline at end of file +csharp_indent_labels = one_less_than_current +csharp_using_directive_placement = outside_namespace:silent +csharp_prefer_simple_using_statement = true:suggestion +csharp_prefer_braces = true:silent +csharp_style_prefer_method_group_conversion = true:silent +csharp_style_prefer_top_level_statements = true:silent +csharp_style_prefer_primary_constructors = true:suggestion +csharp_style_expression_bodied_methods = false:silent +csharp_style_expression_bodied_constructors = false:silent +csharp_style_expression_bodied_operators = false:silent +csharp_style_expression_bodied_properties = true:silent +csharp_style_expression_bodied_indexers = true:silent +csharp_style_expression_bodied_accessors = true:silent +csharp_style_expression_bodied_lambdas = true:silent +csharp_style_expression_bodied_local_functions = false:silent + +[{*.yaml,*.yml}] +dotnet_style_namespace_match_folder = true:suggestion +dotnet_style_operator_placement_when_wrapping = beginning_of_line +tab_width = 3 +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_null_propagation = true:suggestion +dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion +dotnet_style_prefer_auto_properties = true:silent +dotnet_style_object_initializer = true:suggestion +dotnet_style_collection_initializer = true:suggestion +dotnet_style_prefer_simplified_boolean_expressions = true:suggestion +dotnet_style_prefer_conditional_expression_over_assignment = true:silent + +[*.csv] +indent_style = tab +tab_width = 4 \ No newline at end of file diff --git a/Directory.Packages.props b/Directory.Packages.props index 3705a15..65d6a5e 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -1,71 +1,70 @@ - - - - - - - - - - - - - - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - + + + + + + + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + \ No newline at end of file diff --git a/src/Pandatech.CleanArchitecture.Api/Endpoints/Users/UserEndpoints.cs b/src/Pandatech.CleanArchitecture.Api/Endpoints/Users/UserEndpoints.cs index 0feda73..cd2c150 100644 --- a/src/Pandatech.CleanArchitecture.Api/Endpoints/Users/UserEndpoints.cs +++ b/src/Pandatech.CleanArchitecture.Api/Endpoints/Users/UserEndpoints.cs @@ -1,4 +1,3 @@ -using BaseConverter.Extensions; using FluentMinimalApiMapper; using GridifyExtensions.Extensions; using MediatR; @@ -49,7 +48,6 @@ public void AddRoutes(IEndpointRouteBuilder app) return TypedResults.Ok(user); }) .Authorize() - .RouteBaseConverter() .ProducesNotFound(); @@ -61,7 +59,6 @@ public void AddRoutes(IEndpointRouteBuilder app) return TypedResults.Ok(); }) .Authorize() - .RouteBaseConverter() .ProducesBadRequest() .ProducesConflict(); @@ -77,7 +74,6 @@ public void AddRoutes(IEndpointRouteBuilder app) return TypedResults.Ok(); }) .Authorize() - .RouteBaseConverter() .ProducesBadRequest() .ProducesNotFound(); @@ -89,7 +85,6 @@ public void AddRoutes(IEndpointRouteBuilder app) return TypedResults.Ok(); }) .Authorize() - .RouteBaseConverter() .ProducesBadRequest() .ProducesNotFound(); @@ -111,7 +106,7 @@ public void AddRoutes(IEndpointRouteBuilder app) .Authorize() .ProducesBadRequest(); - groupApp.MapGet("/column/distinct", + groupApp.MapGet("/column-distinct-values", async ([AsParameters] GetUserColumnDistinctValuesQuery query, ISender sender, CancellationToken token) => diff --git a/src/Pandatech.CleanArchitecture.Api/Extensions/SwaggerExtension.cs b/src/Pandatech.CleanArchitecture.Api/Extensions/SwaggerExtension.cs index 2d4fa5a..ae6c856 100644 --- a/src/Pandatech.CleanArchitecture.Api/Extensions/SwaggerExtension.cs +++ b/src/Pandatech.CleanArchitecture.Api/Extensions/SwaggerExtension.cs @@ -1,5 +1,4 @@ -using BaseConverter.Extensions; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi.Models; using Pandatech.CleanArchitecture.Api.Configurations.Options; using Pandatech.CleanArchitecture.Api.Helpers; using Swashbuckle.AspNetCore.SwaggerGen; @@ -40,8 +39,6 @@ public static WebApplicationBuilder AddSwagger(this WebApplicationBuilder builde }); } - // Add string input support into int64 field - options.AddBaseConverterFilters(); options.SchemaFilter(); // Add the custom token authentication option diff --git a/src/Pandatech.CleanArchitecture.Api/appsettings.Development.json b/src/Pandatech.CleanArchitecture.Api/appsettings.Development.json index 5b027ba..8b0489e 100644 --- a/src/Pandatech.CleanArchitecture.Api/appsettings.Development.json +++ b/src/Pandatech.CleanArchitecture.Api/appsettings.Development.json @@ -35,8 +35,7 @@ "RefreshTokenExpirationMinutes": "250000", "RefreshTokenMaxExpirationMinutes": "93110400", "CookieDomain": ".pandatech.it", - "AESKey": "**", - "Base36Chars": "**" + "AESKey": "**" }, "ElasticIndexName": "be-tmp-pandatech-vertical-slices", "Communicator": { diff --git a/src/Pandatech.CleanArchitecture.Api/appsettings.Local.json b/src/Pandatech.CleanArchitecture.Api/appsettings.Local.json index c722687..1fff3ff 100644 --- a/src/Pandatech.CleanArchitecture.Api/appsettings.Local.json +++ b/src/Pandatech.CleanArchitecture.Api/appsettings.Local.json @@ -34,8 +34,7 @@ "RefreshTokenExpirationMinutes": "1440", "RefreshTokenMaxExpirationMinutes": "93110400", "CookieDomain": ".localhost", - "AesKey": "CS3mDKKzjY0QGDpkazeaJUj0UHLMLd5qCW1lCTovDcE=", - "Base36Chars": "0123456789abcdefghijklmnopqrstuvwxyz" + "AesKey": "CS3mDKKzjY0QGDpkazeaJUj0UHLMLd5qCW1lCTovDcE=" }, "Communicator": { "SmsFake": true, diff --git a/src/Pandatech.CleanArchitecture.Api/appsettings.Production.json b/src/Pandatech.CleanArchitecture.Api/appsettings.Production.json index 094fae5..42dac80 100644 --- a/src/Pandatech.CleanArchitecture.Api/appsettings.Production.json +++ b/src/Pandatech.CleanArchitecture.Api/appsettings.Production.json @@ -35,8 +35,7 @@ "RefreshTokenExpirationMinutes": "1440", "RefreshTokenMaxExpirationMinutes": "3110400", "CookieDomain": ".pandatech.it", - "AESKey": "**", - "Base36Chars": "**" + "AESKey": "**" }, "ElasticIndexName": "be-tmp-pandatech-vertical-slices", "CorsSettings": { diff --git a/src/Pandatech.CleanArchitecture.Api/appsettings.QA.json b/src/Pandatech.CleanArchitecture.Api/appsettings.QA.json index 5b027ba..8b0489e 100644 --- a/src/Pandatech.CleanArchitecture.Api/appsettings.QA.json +++ b/src/Pandatech.CleanArchitecture.Api/appsettings.QA.json @@ -35,8 +35,7 @@ "RefreshTokenExpirationMinutes": "250000", "RefreshTokenMaxExpirationMinutes": "93110400", "CookieDomain": ".pandatech.it", - "AESKey": "**", - "Base36Chars": "**" + "AESKey": "**" }, "ElasticIndexName": "be-tmp-pandatech-vertical-slices", "Communicator": { diff --git a/src/Pandatech.CleanArchitecture.Application/Features/Auth/Contracts/IdentityState/IdentityStateCommandResponse.cs b/src/Pandatech.CleanArchitecture.Application/Features/Auth/Contracts/IdentityState/IdentityStateCommandResponse.cs index 304bd3c..c223b8f 100644 --- a/src/Pandatech.CleanArchitecture.Application/Features/Auth/Contracts/IdentityState/IdentityStateCommandResponse.cs +++ b/src/Pandatech.CleanArchitecture.Application/Features/Auth/Contracts/IdentityState/IdentityStateCommandResponse.cs @@ -1,4 +1,3 @@ -using BaseConverter.Attributes; using Pandatech.CleanArchitecture.Core.DTOs.Auth; using Pandatech.CleanArchitecture.Core.Enums; @@ -10,9 +9,7 @@ public class IdentityStateCommandResponse( string fullName, UserRole userRole) { - [PropertyBaseConverter] public long UserId { get; set; } = userId; - public UserStatus Status { get; set; } = status; public string FullName { get; set; } = fullName; public UserRole UserRole { get; set; } = userRole; diff --git a/src/Pandatech.CleanArchitecture.Application/Features/Auth/Contracts/Login/LoginCommandResponse.cs b/src/Pandatech.CleanArchitecture.Application/Features/Auth/Contracts/Login/LoginCommandResponse.cs index 9d9bd94..51904f6 100644 --- a/src/Pandatech.CleanArchitecture.Application/Features/Auth/Contracts/Login/LoginCommandResponse.cs +++ b/src/Pandatech.CleanArchitecture.Application/Features/Auth/Contracts/Login/LoginCommandResponse.cs @@ -1,4 +1,3 @@ -using BaseConverter.Attributes; using Pandatech.CleanArchitecture.Application.Features.Auth.Contracts.CreateToken; using Pandatech.CleanArchitecture.Core.Enums; @@ -6,7 +5,6 @@ namespace Pandatech.CleanArchitecture.Application.Features.Auth.Contracts.Login; public class LoginCommandResponse { - [PropertyBaseConverter] public long UserId { get; set; } public bool ForcePasswordChange { get; set; } diff --git a/src/Pandatech.CleanArchitecture.Application/Features/Auth/Contracts/RefreshToken/RefreshTokenCommandResponse.cs b/src/Pandatech.CleanArchitecture.Application/Features/Auth/Contracts/RefreshToken/RefreshTokenCommandResponse.cs index 0da2aa2..1b550e6 100644 --- a/src/Pandatech.CleanArchitecture.Application/Features/Auth/Contracts/RefreshToken/RefreshTokenCommandResponse.cs +++ b/src/Pandatech.CleanArchitecture.Application/Features/Auth/Contracts/RefreshToken/RefreshTokenCommandResponse.cs @@ -1,4 +1,3 @@ -using BaseConverter.Attributes; using Pandatech.CleanArchitecture.Core.Entities; using Pandatech.CleanArchitecture.Core.Enums; @@ -6,7 +5,6 @@ namespace Pandatech.CleanArchitecture.Application.Features.Auth.Contracts.Refres public class RefreshTokenCommandResponse { - [PropertyBaseConverter] public long UserId { get; set; } public bool ForcePasswordChange { get; set; } diff --git a/src/Pandatech.CleanArchitecture.Application/Features/User/Application/Delete/DeleteUsersCommand.cs b/src/Pandatech.CleanArchitecture.Application/Features/User/Application/Delete/DeleteUsersCommand.cs index 16dfd40..e138681 100644 --- a/src/Pandatech.CleanArchitecture.Application/Features/User/Application/Delete/DeleteUsersCommand.cs +++ b/src/Pandatech.CleanArchitecture.Application/Features/User/Application/Delete/DeleteUsersCommand.cs @@ -1,10 +1,5 @@ -using BaseConverter.Attributes; using Pandatech.CleanArchitecture.Core.Interfaces; namespace Pandatech.CleanArchitecture.Application.Features.User.Application.Delete; -public class DeleteUsersCommand : ICommand -{ - [PropertyBaseConverter] - public required List Ids { get; set; } -} \ No newline at end of file +public record DeleteUsersCommand(string Filter) : ICommand; \ No newline at end of file diff --git a/src/Pandatech.CleanArchitecture.Application/Features/User/Application/Delete/DeleteUsersCommandHandler.cs b/src/Pandatech.CleanArchitecture.Application/Features/User/Application/Delete/DeleteUsersCommandHandler.cs index b5b1d37..bff0e15 100644 --- a/src/Pandatech.CleanArchitecture.Application/Features/User/Application/Delete/DeleteUsersCommandHandler.cs +++ b/src/Pandatech.CleanArchitecture.Application/Features/User/Application/Delete/DeleteUsersCommandHandler.cs @@ -6,22 +6,9 @@ namespace Pandatech.CleanArchitecture.Application.Features.User.Application.Dele public class DeleteUsersCommandHandler(IUnitOfWork unitOfWork, IRequestContext requestContext) : ICommandHandler { - public async Task Handle(DeleteUsersCommand request, CancellationToken cancellationToken) + public Task Handle(DeleteUsersCommand request, CancellationToken cancellationToken) { - var users = await unitOfWork - .Users - .GetByIdsExceptSuperAsync(request.Ids, cancellationToken); - - if (users.Count == 0) - { - return; - } - - foreach (var user in users) - { - user.MarkAsDeleted(requestContext.Identity.UserId); - } - - await unitOfWork.SaveChangesAsync(cancellationToken); + return unitOfWork.Users + .DeleteAsync(request.Filter, requestContext.Identity.UserId, cancellationToken); } } \ No newline at end of file diff --git a/src/Pandatech.CleanArchitecture.Application/Features/User/Application/Delete/DeleteUsersCommandValidator.cs b/src/Pandatech.CleanArchitecture.Application/Features/User/Application/Delete/DeleteUsersCommandValidator.cs deleted file mode 100644 index a3ea50e..0000000 --- a/src/Pandatech.CleanArchitecture.Application/Features/User/Application/Delete/DeleteUsersCommandValidator.cs +++ /dev/null @@ -1,13 +0,0 @@ -using FluentValidation; - -namespace Pandatech.CleanArchitecture.Application.Features.User.Application.Delete; - -public class DeleteUsersCommandValidator : AbstractValidator -{ - public DeleteUsersCommandValidator() - { - RuleFor(x => x.Ids) - .NotEmpty() - .ForEach(x => x.NotEmpty()); - } -} \ No newline at end of file diff --git a/src/Pandatech.CleanArchitecture.Application/Features/User/Application/GetUsers/GetUsersQueryHandler.cs b/src/Pandatech.CleanArchitecture.Application/Features/User/Application/GetUsers/GetUsersQueryHandler.cs index 76a7451..41d495a 100644 --- a/src/Pandatech.CleanArchitecture.Application/Features/User/Application/GetUsers/GetUsersQueryHandler.cs +++ b/src/Pandatech.CleanArchitecture.Application/Features/User/Application/GetUsers/GetUsersQueryHandler.cs @@ -1,4 +1,5 @@ -using GridifyExtensions.Models; +using GridifyExtensions.Extensions; +using GridifyExtensions.Models; using Pandatech.CleanArchitecture.Application.Features.User.Contracts.GetById; using Pandatech.CleanArchitecture.Core.Interfaces; using Pandatech.CleanArchitecture.Core.Interfaces.Repositories; @@ -12,6 +13,7 @@ public Task> Handle(GetUsersQuery request, C { return unitOfWork .Users + .WhereNotSuperAdmin() .FilterOrderAndGetPagedAsync(request, x => new GetUserQueryResponse { diff --git a/src/Pandatech.CleanArchitecture.Application/Features/User/Application/UpdateStatus/UpdateUserStatusCommand.cs b/src/Pandatech.CleanArchitecture.Application/Features/User/Application/UpdateStatus/UpdateUserStatusCommand.cs index fabb23b..865cfd2 100644 --- a/src/Pandatech.CleanArchitecture.Application/Features/User/Application/UpdateStatus/UpdateUserStatusCommand.cs +++ b/src/Pandatech.CleanArchitecture.Application/Features/User/Application/UpdateStatus/UpdateUserStatusCommand.cs @@ -1,5 +1,4 @@ using System.Text.Json.Serialization; -using BaseConverter.Attributes; using Pandatech.CleanArchitecture.Core.Enums; using Pandatech.CleanArchitecture.Core.Interfaces; @@ -7,7 +6,6 @@ namespace Pandatech.CleanArchitecture.Application.Features.User.Application.Upda public class UpdateUserStatusCommand : ICommand { - [PropertyBaseConverter] [JsonIgnore] public long Id { get; set; } diff --git a/src/Pandatech.CleanArchitecture.Application/Features/User/Contracts/GetById/GetUserQueryResponse.cs b/src/Pandatech.CleanArchitecture.Application/Features/User/Contracts/GetById/GetUserQueryResponse.cs index 88000af..a1b1d2f 100644 --- a/src/Pandatech.CleanArchitecture.Application/Features/User/Contracts/GetById/GetUserQueryResponse.cs +++ b/src/Pandatech.CleanArchitecture.Application/Features/User/Contracts/GetById/GetUserQueryResponse.cs @@ -1,11 +1,9 @@ -using BaseConverter.Attributes; using Pandatech.CleanArchitecture.Core.Enums; namespace Pandatech.CleanArchitecture.Application.Features.User.Contracts.GetById; public class GetUserQueryResponse { - [PropertyBaseConverter] public long Id { get; set; } public required string Username { get; set; } diff --git a/src/Pandatech.CleanArchitecture.Core/Interfaces/Repositories/EntityRepositories/IUserRepository.cs b/src/Pandatech.CleanArchitecture.Core/Interfaces/Repositories/EntityRepositories/IUserRepository.cs index 4a46eef..0d37d58 100644 --- a/src/Pandatech.CleanArchitecture.Core/Interfaces/Repositories/EntityRepositories/IUserRepository.cs +++ b/src/Pandatech.CleanArchitecture.Core/Interfaces/Repositories/EntityRepositories/IUserRepository.cs @@ -6,6 +6,9 @@ public interface IUserRepository : IBaseRepository { Task IsUsernameDuplicateAsync(string username, CancellationToken cancellationToken = default); Task> GetByIdsExceptSuperAsync(List ids, CancellationToken cancellationToken = default); + + IQueryable WhereNotSuperAdmin(); Task GetByUsernameAsync(string username, CancellationToken cancellationToken = default); + Task DeleteAsync(string requestFilter, long identityUserId, CancellationToken cancellationToken); } \ No newline at end of file diff --git a/src/Pandatech.CleanArchitecture.Core/Pandatech.CleanArchitecture.Core.csproj b/src/Pandatech.CleanArchitecture.Core/Pandatech.CleanArchitecture.Core.csproj index 70616ad..f15b36c 100644 --- a/src/Pandatech.CleanArchitecture.Core/Pandatech.CleanArchitecture.Core.csproj +++ b/src/Pandatech.CleanArchitecture.Core/Pandatech.CleanArchitecture.Core.csproj @@ -8,7 +8,6 @@ - diff --git a/src/Pandatech.CleanArchitecture.Infrastructure/Context/EntityFilters/UserEntityFilters.cs b/src/Pandatech.CleanArchitecture.Infrastructure/Context/EntityFilters/UserEntityFilters.cs index b1fdf76..a2d57e9 100644 --- a/src/Pandatech.CleanArchitecture.Infrastructure/Context/EntityFilters/UserEntityFilters.cs +++ b/src/Pandatech.CleanArchitecture.Infrastructure/Context/EntityFilters/UserEntityFilters.cs @@ -1,4 +1,4 @@ -using BaseConverter; +using GridifyExtensions.Extensions; using GridifyExtensions.Models; using Pandatech.CleanArchitecture.Core.Entities; using Pandatech.CleanArchitecture.Core.Enums; @@ -11,10 +11,12 @@ public UserEntityFilters() { GenerateMappings(); AddMap("Role", x => x.Role != UserRole.SuperAdmin); - AddMap("Id", x => x.Id, x => PandaBaseConverter.Base36ToBase10NotNull(x)); AddMap("FullName", x => x.FullName.ToLower(), x => x.ToLower()); AddMap("Username", x => x.Username.ToLower(), x => x.ToLower()); AddMap("Comment", x => x.Comment.ToLower(), x => x.ToLower()); + AddMap("CreatedAt", x => x.CreatedAt, x => x.ToUtcDateTime()); + AddMap("UpdatedAt", x => x.UpdatedAt, x => x.ToUtcDateTime()); + AddDefaultOrderBy("FullName"); } } \ No newline at end of file diff --git a/src/Pandatech.CleanArchitecture.Infrastructure/DependencyInjection.cs b/src/Pandatech.CleanArchitecture.Infrastructure/DependencyInjection.cs index fe64ac2..a4ce1a9 100644 --- a/src/Pandatech.CleanArchitecture.Infrastructure/DependencyInjection.cs +++ b/src/Pandatech.CleanArchitecture.Infrastructure/DependencyInjection.cs @@ -1,5 +1,4 @@ -using BaseConverter; -using Communicator.Extensions; +using Communicator.Extensions; using DistributedCache.Extensions; using GridifyExtensions.Extensions; using MassTransit.PostgresOutbox.Extensions; @@ -24,7 +23,7 @@ public static WebApplicationBuilder AddInfrastructureLayer(this WebApplicationBu .AddPostgresContext() .ConfigureOpenTelemetry() .AddPandaCrypto() - .AddGridify(PandaBaseConverter.Base36Chars) + .AddGridify() .AddRepositories() .AddCommunicator() .AddDistributedCache(options => diff --git a/src/Pandatech.CleanArchitecture.Infrastructure/Extensions/CryptoExtensions.cs b/src/Pandatech.CleanArchitecture.Infrastructure/Extensions/CryptoExtensions.cs index e232a98..08686e8 100644 --- a/src/Pandatech.CleanArchitecture.Infrastructure/Extensions/CryptoExtensions.cs +++ b/src/Pandatech.CleanArchitecture.Infrastructure/Extensions/CryptoExtensions.cs @@ -1,4 +1,3 @@ -using BaseConverter.Extensions; using Microsoft.AspNetCore.Builder; using Pandatech.CleanArchitecture.Infrastructure.Helpers; using Pandatech.Crypto; @@ -9,7 +8,6 @@ public static class CryptoExtensions { public static WebApplicationBuilder AddPandaCrypto(this WebApplicationBuilder builder) { - builder.ConfigureBaseConverter(builder.Configuration[ConfigurationPaths.Base36Chars]!); builder.Services.AddPandatechCryptoAes256(o => o.Key = builder.Configuration[ConfigurationPaths.AesKey]!); builder.Services.AddPandatechCryptoArgon2Id(); diff --git a/src/Pandatech.CleanArchitecture.Infrastructure/Helpers/ConfigurationPaths.cs b/src/Pandatech.CleanArchitecture.Infrastructure/Helpers/ConfigurationPaths.cs index f8ca616..23055d1 100644 --- a/src/Pandatech.CleanArchitecture.Infrastructure/Helpers/ConfigurationPaths.cs +++ b/src/Pandatech.CleanArchitecture.Infrastructure/Helpers/ConfigurationPaths.cs @@ -2,7 +2,6 @@ namespace Pandatech.CleanArchitecture.Infrastructure.Helpers; public static class ConfigurationPaths { - public const string Base36Chars = "Security:Base36Chars"; public const string AesKey = "Security:AESKey"; public const string ElasticSearchUrl = "ElasticSearch"; public const string ElasticIndex = "ElasticIndexName"; diff --git a/src/Pandatech.CleanArchitecture.Infrastructure/Repositories/EntityRepositories/UserRepository.cs b/src/Pandatech.CleanArchitecture.Infrastructure/Repositories/EntityRepositories/UserRepository.cs index 5d84f82..65b81f8 100644 --- a/src/Pandatech.CleanArchitecture.Infrastructure/Repositories/EntityRepositories/UserRepository.cs +++ b/src/Pandatech.CleanArchitecture.Infrastructure/Repositories/EntityRepositories/UserRepository.cs @@ -1,3 +1,6 @@ +using EFCore.AuditBase; +using GridifyExtensions.Extensions; +using GridifyExtensions.Models; using Microsoft.EntityFrameworkCore; using Pandatech.CleanArchitecture.Core.Entities; using Pandatech.CleanArchitecture.Core.Enums; @@ -22,9 +25,31 @@ public Task> GetByIdsExceptSuperAsync(List ids, CancellationTok .ToListAsync(cancellationToken); } + public IQueryable WhereNotSuperAdmin() + { + return Context.Users + .Where(u => u.Role != UserRole.SuperAdmin); + } + public Task GetByUsernameAsync(string username, CancellationToken cancellationToken = default) { return Context.Users .FirstOrDefaultAsync(x => x.Username == username, cancellationToken); } + + public Task DeleteAsync(string requestFilter, long identityUserId, CancellationToken cancellationToken) + { + var filterModel = new GridifyQueryModel + { + Page = 1, + PageSize = 1, + OrderBy = null, + Filter = requestFilter + }; + + return Context.Users + .Where(x => x.Role != UserRole.SuperAdmin) + .ApplyFilter(filterModel) + .ExecuteSoftDeleteAsync(identityUserId, cancellationToken: cancellationToken); + } } \ No newline at end of file