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