Refactor user ID handling in command handlers and update Protobuf package version to 0.0.124

This commit is contained in:
masoodafar-web
2025-11-20 23:18:07 +03:30
parent 0867244888
commit 8f25757307
18 changed files with 38 additions and 22 deletions

View File

@@ -17,7 +17,7 @@ public class LoggingBehaviour<TRequest> : IRequestPreProcessor<TRequest> where T
public async Task Process(TRequest request, CancellationToken cancellationToken) public async Task Process(TRequest request, CancellationToken cancellationToken)
{ {
var requestName = typeof(TRequest).Name; var requestName = typeof(TRequest).Name;
var userId = _currentUserService.UserId ?? string.Empty; var userId = _currentUserService.UserId ;
_logger.LogInformation("Request: {Name} {@UserId} {@Request}", _logger.LogInformation("Request: {Name} {@UserId} {@Request}",
requestName, userId, request); requestName, userId, request);
} }

View File

@@ -32,7 +32,7 @@ public class PerformanceBehaviour<TRequest, TResponse> : IPipelineBehavior<TRequ
if (elapsedMilliseconds > 500) if (elapsedMilliseconds > 500)
{ {
var requestName = typeof(TRequest).Name; var requestName = typeof(TRequest).Name;
var userId = _currentUserService.UserId ?? string.Empty; var userId = _currentUserService.UserId;
_logger.LogWarning("Long Running Request: {Name} ({ElapsedMilliseconds} milliseconds) {@UserId} {@Request}", _logger.LogWarning("Long Running Request: {Name} ({ElapsedMilliseconds} milliseconds) {@UserId} {@Request}",
requestName, elapsedMilliseconds, userId, request); requestName, elapsedMilliseconds, userId, request);

View File

@@ -2,7 +2,7 @@ namespace FrontOffice.BFF.Application.Common.Interfaces;
public interface ICurrentUserService public interface ICurrentUserService
{ {
string? UserId { get; } long? UserId { get; }
string? FirstName { get; } string? FirstName { get; }
string? LastName { get; } string? LastName { get; }
string? MobileNumber { get; } string? MobileNumber { get; }

View File

@@ -1,16 +1,26 @@
using CMSMicroservice.Protobuf.Protos.UserCarts;
namespace FrontOffice.BFF.Application.ShopingCartCQ.Commands.AddNewUserCart; namespace FrontOffice.BFF.Application.ShopingCartCQ.Commands.AddNewUserCart;
public class AddNewUserCartCommandHandler : IRequestHandler<AddNewUserCartCommand, Unit> public class AddNewUserCartCommandHandler : IRequestHandler<AddNewUserCartCommand, Unit>
{ {
private readonly IApplicationContractContext _context; private readonly IApplicationContractContext _context;
private readonly ICurrentUserService _currentUserService;
public AddNewUserCartCommandHandler(IApplicationContractContext context) public AddNewUserCartCommandHandler(IApplicationContractContext context, ICurrentUserService currentUserService)
{ {
_context = context; _context = context;
_currentUserService = currentUserService;
} }
public async Task<Unit> Handle(AddNewUserCartCommand request, CancellationToken cancellationToken) public async Task<Unit> Handle(AddNewUserCartCommand request, CancellationToken cancellationToken)
{ {
//TODO: Implement your business logic await _context.UserCart.CreateNewUserCartsAsync(new CreateNewUserCartsRequest()
{
ProductId = request.ProductId,
Count = request.Count,
UserId = _currentUserService.UserId.Value
}, cancellationToken: cancellationToken);
return new Unit(); return new Unit();
} }
} }

View File

@@ -1,3 +1,5 @@
using CMSMicroservice.Protobuf.Protos.UserCarts;
namespace FrontOffice.BFF.Application.ShopingCartCQ.Commands.UpdateUserCart; namespace FrontOffice.BFF.Application.ShopingCartCQ.Commands.UpdateUserCart;
public class UpdateUserCartCommandHandler : IRequestHandler<UpdateUserCartCommand, Unit> public class UpdateUserCartCommandHandler : IRequestHandler<UpdateUserCartCommand, Unit>
{ {
@@ -10,7 +12,11 @@ public class UpdateUserCartCommandHandler : IRequestHandler<UpdateUserCartComman
public async Task<Unit> Handle(UpdateUserCartCommand request, CancellationToken cancellationToken) public async Task<Unit> Handle(UpdateUserCartCommand request, CancellationToken cancellationToken)
{ {
//TODO: Implement your business logic await _context.UserCart.UpdateUserCartsAsync(new UpdateUserCartsRequest()
{
Id = request.UserCartId,
Count = request.Count,
}, cancellationToken: cancellationToken);
return new Unit(); return new Unit();
} }
} }

View File

@@ -18,7 +18,7 @@ public class GetAllUserCartQueryHandler : IRequestHandler<GetAllUserCartQuery, G
{ {
Filter = new GetAllUserCartsByFilterFilter() Filter = new GetAllUserCartsByFilterFilter()
{ {
UserId = long.Parse(_currentUserService.UserId ?? throw new InvalidOperationException()) UserId = _currentUserService.UserId ?? throw new InvalidOperationException()
} }
}, cancellationToken: cancellationToken); }, cancellationToken: cancellationToken);
if (userAllCartResponse!=null && userAllCartResponse.Models.Count>0) if (userAllCartResponse!=null && userAllCartResponse.Models.Count>0)

View File

@@ -16,7 +16,7 @@ public class CreateNewUserAddressCommandHandler : IRequestHandler<CreateNewUserA
{ {
var userId = _currentUserService.UserId ?? throw new ForbiddenAccessException(); var userId = _currentUserService.UserId ?? throw new ForbiddenAccessException();
var req = request.Adapt<CreateNewUserAddressRequest>(); var req = request.Adapt<CreateNewUserAddressRequest>();
req.UserId = long.Parse(userId); req.UserId = userId;
var response = await _context.UserAddress.CreateNewUserAddressAsync(request: req, cancellationToken: cancellationToken); var response = await _context.UserAddress.CreateNewUserAddressAsync(request: req, cancellationToken: cancellationToken);
return response.Adapt<CreateNewUserAddressResponseDto>(); return response.Adapt<CreateNewUserAddressResponseDto>();
} }

View File

@@ -17,7 +17,7 @@ public class GetAllUserAddressByFilterQueryHandler : IRequestHandler<GetAllUserA
var userId = _currentUserService.UserId ?? throw new ForbiddenAccessException(); var userId = _currentUserService.UserId ?? throw new ForbiddenAccessException();
var req = request.Adapt<GetAllUserAddressByFilterRequest>(); var req = request.Adapt<GetAllUserAddressByFilterRequest>();
req.Filter ??= new(); req.Filter ??= new();
req.Filter.UserId = long.Parse(userId); req.Filter.UserId = userId;
var response = await _context.UserAddress.GetAllUserAddressByFilterAsync(request: req, cancellationToken: cancellationToken); var response = await _context.UserAddress.GetAllUserAddressByFilterAsync(request: req, cancellationToken: cancellationToken);
return response.Adapt<GetAllUserAddressByFilterResponseDto>(); return response.Adapt<GetAllUserAddressByFilterResponseDto>();
} }

View File

@@ -19,7 +19,7 @@ public class AcceptContractCommandHandler : IRequestHandler<AcceptContractComman
await _context.UserContract.CreateNewUserContractAsync(new CreateNewUserContractRequest() await _context.UserContract.CreateNewUserContractAsync(new CreateNewUserContractRequest()
{ {
SignGuid = request.SignGuid, SignGuid = request.SignGuid,
UserId = long.Parse(_currentUserService.UserId ?? throw new InvalidOperationException()), UserId = _currentUserService.UserId ?? throw new InvalidOperationException(),
ContractId = 1, ContractId = 1,
SignedPdfFile = request.ContractHtml, SignedPdfFile = request.ContractHtml,
}, cancellationToken: cancellationToken); }, cancellationToken: cancellationToken);

View File

@@ -15,7 +15,7 @@ public class SetPasswordForUserCommandHandler : IRequestHandler<SetPasswordForUs
public async Task<Unit> Handle(SetPasswordForUserCommand request, CancellationToken cancellationToken) public async Task<Unit> Handle(SetPasswordForUserCommand request, CancellationToken cancellationToken)
{ {
var setPasswordRequest = request.Adapt<SetPasswordForUserRequest>(); var setPasswordRequest = request.Adapt<SetPasswordForUserRequest>();
setPasswordRequest.UserId = long.Parse(_currentUserService.UserId ?? throw new InvalidOperationException()); setPasswordRequest.UserId = _currentUserService.UserId ?? throw new InvalidOperationException();
await _context.User.SetPasswordForUserAsync(setPasswordRequest, cancellationToken: cancellationToken); await _context.User.SetPasswordForUserAsync(setPasswordRequest, cancellationToken: cancellationToken);
return new Unit(); return new Unit();

View File

@@ -15,12 +15,12 @@ public class GetUserQueryHandler : IRequestHandler<GetUserQuery, GetUserResponse
var userId = _currentUserService.UserId ?? throw new ForbiddenAccessException(); var userId = _currentUserService.UserId ?? throw new ForbiddenAccessException();
var response = await _context.User.GetUserAsync(request: new() var response = await _context.User.GetUserAsync(request: new()
{ {
Id = long.Parse(userId) Id = userId
}, cancellationToken: cancellationToken); }, cancellationToken: cancellationToken);
var result = response.Adapt<GetUserResponseDto>(); var result = response.Adapt<GetUserResponseDto>();
var getJwtToken = await _context.User.GetJwtTokenAsync(request: new() var getJwtToken = await _context.User.GetJwtTokenAsync(request: new()
{ {
Id = long.Parse(userId) Id = userId
}, cancellationToken: cancellationToken); }, cancellationToken: cancellationToken);
if(getJwtToken != null && !string.IsNullOrWhiteSpace(getJwtToken.Token)) if(getJwtToken != null && !string.IsNullOrWhiteSpace(getJwtToken.Token))
result.Token = getJwtToken.Token; result.Token = getJwtToken.Token;

View File

@@ -20,14 +20,14 @@ public class CreateNewUserOrderCommandHandler : IRequestHandler<CreateNewUserOrd
Filter = new() Filter = new()
{ {
IsDefault = true, IsDefault = true,
UserId = long.Parse(userId) UserId = userId
} }
}, cancellationToken: cancellationToken); }, cancellationToken: cancellationToken);
if (getAllUserAddress?.Models?.Any() == false) if (getAllUserAddress?.Models?.Any() == false)
throw new Exception(message:"آدرس نامعتبر است!!"); throw new Exception(message:"آدرس نامعتبر است!!");
var req = request.Adapt<CreateNewUserOrderRequest>(); var req = request.Adapt<CreateNewUserOrderRequest>();
req.UserId = long.Parse(userId); req.UserId = userId;
req.UserAddressId = getAllUserAddress!.Models.First().Id; req.UserAddressId = getAllUserAddress!.Models.First().Id;
var response = await _context.UserOrder.CreateNewUserOrderAsync(request: req, cancellationToken: cancellationToken); var response = await _context.UserOrder.CreateNewUserOrderAsync(request: req, cancellationToken: cancellationToken);

View File

@@ -18,7 +18,7 @@ public class GetAllUserOrderByFilterQueryHandler : IRequestHandler<GetAllUserOrd
var req = request.Adapt<GetAllUserOrderByFilterRequest>(); var req = request.Adapt<GetAllUserOrderByFilterRequest>();
req.Filter ??= new(); req.Filter ??= new();
req.Filter.UserId = long.Parse(userId); req.Filter.UserId = userId;
var response = await _context.UserOrder.GetAllUserOrderByFilterAsync(request: req, cancellationToken: cancellationToken); var response = await _context.UserOrder.GetAllUserOrderByFilterAsync(request: req, cancellationToken: cancellationToken);
return response.Adapt<GetAllUserOrderByFilterResponseDto>(); return response.Adapt<GetAllUserOrderByFilterResponseDto>();
} }

View File

@@ -7,7 +7,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Afrino.PYMSMicroservice.Protobuf" Version="0.0.11" /> <PackageReference Include="Afrino.PYMSMicroservice.Protobuf" Version="0.0.11" />
<PackageReference Include="Foursat.CMSMicroservice.Protobuf" Version="0.0.123" /> <PackageReference Include="Foursat.CMSMicroservice.Protobuf" Version="0.0.124" />
<PackageReference Include="Google.Protobuf" Version="3.33.0" /> <PackageReference Include="Google.Protobuf" Version="3.33.0" />
<PackageReference Include="Grpc.Net.ClientFactory" Version="2.54.0" /> <PackageReference Include="Grpc.Net.ClientFactory" Version="2.54.0" />
<PackageReference Include="Grpc.Tools" Version="2.76.0"> <PackageReference Include="Grpc.Tools" Version="2.76.0">

View File

@@ -20,7 +20,7 @@ public class LoggingBehaviour : Interceptor
UnaryServerMethod<TRequest, TResponse> continuation) UnaryServerMethod<TRequest, TResponse> continuation)
{ {
var requestName = typeof(TRequest).Name; var requestName = typeof(TRequest).Name;
var userId = _currentUserService.UserId ?? string.Empty; var userId = _currentUserService.UserId;
_logger.LogInformation("gRPC Starting receiving call. Type/Method: {Type} / {Method} Request: {Name} {@UserId} {@Request}", _logger.LogInformation("gRPC Starting receiving call. Type/Method: {Type} / {Method} Request: {Name} {@UserId} {@Request}",
MethodType.Unary, context.Method , requestName, userId, request); MethodType.Unary, context.Method , requestName, userId, request);

View File

@@ -33,7 +33,7 @@ public class PerformanceBehaviour : Interceptor
if (elapsedMilliseconds > 500) if (elapsedMilliseconds > 500)
{ {
var requestName = typeof(TRequest).Name; var requestName = typeof(TRequest).Name;
var userId = _currentUserService.UserId ?? string.Empty; var userId = _currentUserService.UserId;
_logger.LogWarning("gRPC Long Running Request: {Name} ({ElapsedMilliseconds} milliseconds) {@UserId} {@Request}", _logger.LogWarning("gRPC Long Running Request: {Name} ({ElapsedMilliseconds} milliseconds) {@UserId} {@Request}",
requestName, elapsedMilliseconds, userId, request); requestName, elapsedMilliseconds, userId, request);

View File

@@ -13,7 +13,7 @@ public class CurrentUserService : ICurrentUserService
_httpContextAccessor = httpContextAccessor; _httpContextAccessor = httpContextAccessor;
} }
public string? UserId => _httpContextAccessor.HttpContext?.User?.FindFirstValue(ClaimTypes.NameIdentifier); public long? UserId => long?.Parse(_httpContextAccessor.HttpContext?.User?.FindFirstValue(ClaimTypes.NameIdentifier) ?? throw new InvalidOperationException());
public string? FirstName => _httpContextAccessor.HttpContext?.User?.FindFirstValue("FirstName"); public string? FirstName => _httpContextAccessor.HttpContext?.User?.FindFirstValue("FirstName");
public string? LastName => _httpContextAccessor.HttpContext?.User?.FindFirstValue("LastName"); public string? LastName => _httpContextAccessor.HttpContext?.User?.FindFirstValue("LastName");
public string? MobileNumber => _httpContextAccessor.HttpContext?.User?.FindFirstValue("MobileNumber"); public string? MobileNumber => _httpContextAccessor.HttpContext?.User?.FindFirstValue("MobileNumber");

View File

@@ -3,7 +3,7 @@
<TargetFramework>net7.0</TargetFramework> <TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Version>0.0.12</Version> <Version>0.0.13</Version>
<PackageId>FrontOffice.BFF.ShopingCart.Protobuf</PackageId> <PackageId>FrontOffice.BFF.ShopingCart.Protobuf</PackageId>
<GeneratePackageOnBuild>False</GeneratePackageOnBuild> <GeneratePackageOnBuild>False</GeneratePackageOnBuild>
<DebugSymbols>False</DebugSymbols> <DebugSymbols>False</DebugSymbols>