0
0
mirror of https://github.com/alex289/CleanArchitecture.git synced 2025-06-30 02:31:08 +00:00

feat: Code Cleanup

This commit is contained in:
alex289 2023-09-09 12:58:55 +02:00
parent b54d4f4de5
commit 6d63df1eda
No known key found for this signature in database
GPG Key ID: 573F77CD2D87F863
12 changed files with 47 additions and 49 deletions

View File

@ -38,7 +38,7 @@ if (builder.Environment.IsProduction())
.AddSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")!) .AddSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")!)
.AddRedis(builder.Configuration["RedisHostName"]!, "Redis") .AddRedis(builder.Configuration["RedisHostName"]!, "Redis")
.AddRabbitMQ( .AddRabbitMQ(
rabbitConnectionString: $"amqp://{rabbitUser}:{rabbitPass}@{rabbitHost}", $"amqp://{rabbitUser}:{rabbitPass}@{rabbitHost}",
name: "RabbitMQ"); name: "RabbitMQ");
} }

View File

@ -28,7 +28,7 @@ public static class QueryableExtensions
var sorted = GetFirstOrderLevelQuery(query, sort.Parameters.First(), fieldExpressions); var sorted = GetFirstOrderLevelQuery(query, sort.Parameters.First(), fieldExpressions);
for (int i = 1; i < sort.Parameters.Count; i++) for (var i = 1; i < sort.Parameters.Count; i++)
{ {
sorted = GetMultiLevelOrderedQuery(sorted, sort.Parameters[i], fieldExpressions); sorted = GetMultiLevelOrderedQuery(sorted, sort.Parameters[i], fieldExpressions);
} }
@ -38,7 +38,7 @@ public static class QueryableExtensions
private static IOrderedQueryable<TEntity> GetFirstOrderLevelQuery<TEntity>( private static IOrderedQueryable<TEntity> GetFirstOrderLevelQuery<TEntity>(
IQueryable<TEntity> query, IQueryable<TEntity> query,
SortParameter @param, SortParameter param,
Dictionary<string, Expression<Func<TEntity, object>>> fieldExpressions) Dictionary<string, Expression<Func<TEntity, object>>> fieldExpressions)
{ {
if (!fieldExpressions.TryGetValue(param.ParameterName, out var fieldExpression)) if (!fieldExpressions.TryGetValue(param.ParameterName, out var fieldExpression))
@ -56,7 +56,7 @@ public static class QueryableExtensions
private static IOrderedQueryable<TEntity> GetMultiLevelOrderedQuery<TEntity>( private static IOrderedQueryable<TEntity> GetMultiLevelOrderedQuery<TEntity>(
IOrderedQueryable<TEntity> query, IOrderedQueryable<TEntity> query,
SortParameter @param, SortParameter param,
Dictionary<string, Expression<Func<TEntity, object>>> fieldExpressions) Dictionary<string, Expression<Func<TEntity, object>>> fieldExpressions)
{ {
if (!fieldExpressions.TryGetValue(param.ParameterName, out var fieldExpression)) if (!fieldExpressions.TryGetValue(param.ParameterName, out var fieldExpression))

View File

@ -43,7 +43,7 @@ public static class ServiceCollectionExtensions
{ {
services.AddScoped<ISortingExpressionProvider<TenantViewModel, Tenant>, TenantViewModelSortProvider>(); services.AddScoped<ISortingExpressionProvider<TenantViewModel, Tenant>, TenantViewModelSortProvider>();
services.AddScoped<ISortingExpressionProvider<UserViewModel, User>, UserViewModelSortProvider>(); services.AddScoped<ISortingExpressionProvider<UserViewModel, User>, UserViewModelSortProvider>();
return services; return services;
} }
} }

View File

@ -1,6 +1,5 @@
using System; using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using CleanArchitecture.Application.SortProviders;
using CleanArchitecture.Application.ViewModels; using CleanArchitecture.Application.ViewModels;
using CleanArchitecture.Application.ViewModels.Sorting; using CleanArchitecture.Application.ViewModels.Sorting;
using CleanArchitecture.Application.ViewModels.Tenants; using CleanArchitecture.Application.ViewModels.Tenants;

View File

@ -10,11 +10,13 @@ public interface IUserService
{ {
public Task<UserViewModel?> GetUserByUserIdAsync(Guid userId); public Task<UserViewModel?> GetUserByUserIdAsync(Guid userId);
public Task<UserViewModel?> GetCurrentUserAsync(); public Task<UserViewModel?> GetCurrentUserAsync();
public Task<PagedResult<UserViewModel>> GetAllUsersAsync( public Task<PagedResult<UserViewModel>> GetAllUsersAsync(
PageQuery query, PageQuery query,
bool includeDeleted, bool includeDeleted,
string searchTerm = "", string searchTerm = "",
SortQuery? sortQuery = null); SortQuery? sortQuery = null);
public Task<Guid> CreateUserAsync(CreateUserViewModel user); public Task<Guid> CreateUserAsync(CreateUserViewModel user);
public Task UpdateUserAsync(UpdateUserViewModel user); public Task UpdateUserAsync(UpdateUserViewModel user);
public Task DeleteUserAsync(Guid userId); public Task DeleteUserAsync(Guid userId);

View File

@ -15,8 +15,8 @@ namespace CleanArchitecture.Application.Queries.Tenants.GetAll;
public sealed class GetAllTenantsQueryHandler : public sealed class GetAllTenantsQueryHandler :
IRequestHandler<GetAllTenantsQuery, PagedResult<TenantViewModel>> IRequestHandler<GetAllTenantsQuery, PagedResult<TenantViewModel>>
{ {
private readonly ITenantRepository _tenantRepository;
private readonly ISortingExpressionProvider<TenantViewModel, Tenant> _sortingExpressionProvider; private readonly ISortingExpressionProvider<TenantViewModel, Tenant> _sortingExpressionProvider;
private readonly ITenantRepository _tenantRepository;
public GetAllTenantsQueryHandler( public GetAllTenantsQueryHandler(
ITenantRepository tenantRepository, ITenantRepository tenantRepository,

View File

@ -15,8 +15,8 @@ namespace CleanArchitecture.Application.Queries.Users.GetAll;
public sealed class GetAllUsersQueryHandler : public sealed class GetAllUsersQueryHandler :
IRequestHandler<GetAllUsersQuery, PagedResult<UserViewModel>> IRequestHandler<GetAllUsersQuery, PagedResult<UserViewModel>>
{ {
private readonly IUserRepository _userRepository;
private readonly ISortingExpressionProvider<UserViewModel, User> _sortingExpressionProvider; private readonly ISortingExpressionProvider<UserViewModel, User> _sortingExpressionProvider;
private readonly IUserRepository _userRepository;
public GetAllUsersQueryHandler( public GetAllUsersQueryHandler(
IUserRepository userRepository, IUserRepository userRepository,

View File

@ -3,7 +3,6 @@ using System.Threading.Tasks;
using CleanArchitecture.Application.Interfaces; using CleanArchitecture.Application.Interfaces;
using CleanArchitecture.Application.Queries.Tenants.GetAll; using CleanArchitecture.Application.Queries.Tenants.GetAll;
using CleanArchitecture.Application.Queries.Tenants.GetTenantById; using CleanArchitecture.Application.Queries.Tenants.GetTenantById;
using CleanArchitecture.Application.SortProviders;
using CleanArchitecture.Application.ViewModels; using CleanArchitecture.Application.ViewModels;
using CleanArchitecture.Application.ViewModels.Sorting; using CleanArchitecture.Application.ViewModels.Sorting;
using CleanArchitecture.Application.ViewModels.Tenants; using CleanArchitecture.Application.ViewModels.Tenants;

View File

@ -12,9 +12,9 @@ public sealed class TenantViewModelSortProvider : ISortingExpressionProvider<Ten
private static readonly Dictionary<string, Expression<Func<Tenant, object>>> s_expressions = new() private static readonly Dictionary<string, Expression<Func<Tenant, object>>> s_expressions = new()
{ {
{ "id", tenant => tenant.Id }, { "id", tenant => tenant.Id },
{ "name", tenant => tenant.Name }, { "name", tenant => tenant.Name }
}; };
public Dictionary<string, Expression<Func<Tenant, object>>> GetSortingExpressions() public Dictionary<string, Expression<Func<Tenant, object>>> GetSortingExpressions()
{ {
return s_expressions; return s_expressions;

View File

@ -19,7 +19,7 @@ public sealed class UserViewModelSortProvider : ISortingExpressionProvider<UserV
{ "role", user => user.Role }, { "role", user => user.Role },
{ "status", user => user.Status } { "status", user => user.Status }
}; };
public Dictionary<string, Expression<Func<User, object>>> GetSortingExpressions() public Dictionary<string, Expression<Func<User, object>>> GetSortingExpressions()
{ {
return s_expressions; return s_expressions;

View File

@ -6,34 +6,9 @@ namespace CleanArchitecture.Application.ViewModels.Sorting;
public sealed class SortQuery public sealed class SortQuery
{ {
private readonly struct QueryInfo
{
public readonly short PlusSignIndex;
public readonly short MinusSignIndex;
public readonly short FirstSpaceIndex;
public readonly short OpeningBracketIndex;
public readonly short ClosingBracketIndex;
public QueryInfo(
short plusSignIndex,
short minusSignIndex,
short firstSpaceIndex,
short openingBracketIndex,
short closingBracketIndex)
{
PlusSignIndex = plusSignIndex;
MinusSignIndex = minusSignIndex;
FirstSpaceIndex = firstSpaceIndex;
OpeningBracketIndex = openingBracketIndex;
ClosingBracketIndex = closingBracketIndex;
}
}
private string? _query = string.Empty; private string? _query = string.Empty;
private ReadOnlyCollection<SortParameter> _parameters = new(Array.Empty<SortParameter>()); public ReadOnlyCollection<SortParameter> Parameters { get; private set; } = new(Array.Empty<SortParameter>());
public ReadOnlyCollection<SortParameter> Parameters => _parameters;
[FromQuery(Name = "order_by")] [FromQuery(Name = "order_by")]
public string? Query public string? Query
@ -42,7 +17,7 @@ public sealed class SortQuery
set set
{ {
_query = value; _query = value;
_parameters = ParseQuery(_query); Parameters = ParseQuery(_query);
} }
} }
@ -68,7 +43,7 @@ public sealed class SortQuery
var @params = value.Split(','); var @params = value.Split(',');
var parsedParams = new SortParameter[@params.Length]; var parsedParams = new SortParameter[@params.Length];
for (int i = 0; i < @params.Length; i++) for (var i = 0; i < @params.Length; i++)
{ {
parsedParams[i] = GetParam(@params[i]); parsedParams[i] = GetParam(@params[i]);
} }
@ -114,7 +89,8 @@ public sealed class SortQuery
{ {
return new SortParameter(paramName, SortOrder.Ascending); return new SortParameter(paramName, SortOrder.Ascending);
} }
else if (orderName == "desc" || orderName == "descending")
if (orderName == "desc" || orderName == "descending")
{ {
return new SortParameter(paramName, SortOrder.Descending); return new SortParameter(paramName, SortOrder.Descending);
} }
@ -137,10 +113,8 @@ public sealed class SortQuery
{ {
return new SortParameter(value[1..], order); return new SortParameter(value[1..], order);
} }
else
{ return new SortParameter(value[..indicatorIndex], order);
return new SortParameter(value[..indicatorIndex], order);
}
} }
private static SortParameter GetSortParamFromFunctionalStyle(string value, QueryInfo info) private static SortParameter GetSortParamFromFunctionalStyle(string value, QueryInfo info)
@ -158,7 +132,8 @@ public sealed class SortQuery
{ {
return new SortParameter(param, SortOrder.Ascending); return new SortParameter(param, SortOrder.Ascending);
} }
else if (value.StartsWith("desc(") || value.StartsWith("descending("))
if (value.StartsWith("desc(") || value.StartsWith("descending("))
{ {
return new SortParameter(param, SortOrder.Descending); return new SortParameter(param, SortOrder.Descending);
} }
@ -288,7 +263,7 @@ public sealed class SortQuery
private static int FindNextNonWhitespaceCharacter(string value, int startIndex) private static int FindNextNonWhitespaceCharacter(string value, int startIndex)
{ {
for (int i = startIndex; i < value.Length; i++) for (var i = startIndex; i < value.Length; i++)
{ {
if (!char.IsWhiteSpace(value[i])) if (!char.IsWhiteSpace(value[i]))
{ {
@ -298,4 +273,27 @@ public sealed class SortQuery
return -1; return -1;
} }
private readonly struct QueryInfo
{
public readonly short PlusSignIndex;
public readonly short MinusSignIndex;
public readonly short FirstSpaceIndex;
public readonly short OpeningBracketIndex;
public readonly short ClosingBracketIndex;
public QueryInfo(
short plusSignIndex,
short minusSignIndex,
short firstSpaceIndex,
short openingBracketIndex,
short closingBracketIndex)
{
PlusSignIndex = plusSignIndex;
MinusSignIndex = minusSignIndex;
FirstSpaceIndex = firstSpaceIndex;
OpeningBracketIndex = openingBracketIndex;
ClosingBracketIndex = closingBracketIndex;
}
}
} }

View File

@ -52,7 +52,7 @@ public sealed class RabbitMqHandler : BackgroundService
{ {
if (!_configuration.Enabled) if (!_configuration.Enabled)
{ {
_logger.LogInformation($"RabbitMQ is disabled. Skipping the creation of exchange {exchangeName}."); _logger.LogInformation("RabbitMQ is disabled. Skipping the creation of exchange {exchangeName}.", exchangeName);
return; return;
} }
@ -159,7 +159,7 @@ public sealed class RabbitMqHandler : BackgroundService
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogError(ex, $"Error while handling event in queue {ea.RoutingKey}"); _logger.LogError(ex, "Error while handling event in queue {RoutingKey}", ea.RoutingKey);
} }
} }