update1
This commit is contained in:
@@ -1,10 +1,58 @@
|
|||||||
|
using CMSMicroservice.Application.UserOrderCQ.Queries.GetAllUserOrderByFilter;
|
||||||
|
using CMSMicroservice.Application.UserOrderCQ.Queries.GetUserOrder;
|
||||||
|
|
||||||
namespace CMSMicroservice.Application.Common.Mappings;
|
namespace CMSMicroservice.Application.Common.Mappings;
|
||||||
|
|
||||||
public class UserOrderProfile : IRegister
|
public class UserOrderProfile : IRegister
|
||||||
{
|
{
|
||||||
void IRegister.Register(TypeAdapterConfig config)
|
void IRegister.Register(TypeAdapterConfig config)
|
||||||
{
|
{
|
||||||
// config.NewConfig<Source,Destination>()
|
config.NewConfig<UserOrder,GetUserOrderResponseDto>()
|
||||||
// .Map(dest => dest.FullName, src => $"{src.Firstname} {src.Lastname}");
|
.Map(dest => dest.Id, src => src.Id)
|
||||||
|
.Map(dest => dest.Amount, src => src.Amount)
|
||||||
|
.Map(dest => dest.PackageId, src => src.PackageId)
|
||||||
|
.Map(dest => dest.TransactionId, src => src.TransactionId)
|
||||||
|
.Map(dest => dest.PaymentStatus, src => src.PaymentStatus)
|
||||||
|
.Map(dest => dest.PaymentDate, src => src.PaymentDate)
|
||||||
|
.Map(dest => dest.UserId, src => src.UserId)
|
||||||
|
.Map(dest => dest.UserAddressId, src => src.UserAddressId)
|
||||||
|
.Map(dest => dest.PaymentMethod, src => src.PaymentMethod)
|
||||||
|
.Map(dest => dest.UserAddressText, src => src.UserAddress.Address)
|
||||||
|
.Map(dest => dest.FactorDetails, src => src.FactorDetailss.Select(s=>s.Adapt<GetUserOrderResponseFactorDetail>()))
|
||||||
|
|
||||||
|
;
|
||||||
|
|
||||||
|
config.NewConfig<UserOrder,GetAllUserOrderByFilterResponseModel>()
|
||||||
|
.Map(dest => dest.Id, src => src.Id)
|
||||||
|
.Map(dest => dest.Amount, src => src.Amount)
|
||||||
|
.Map(dest => dest.PackageId, src => src.PackageId)
|
||||||
|
.Map(dest => dest.TransactionId, src => src.TransactionId)
|
||||||
|
.Map(dest => dest.PaymentStatus, src => src.PaymentStatus)
|
||||||
|
.Map(dest => dest.PaymentDate, src => src.PaymentDate)
|
||||||
|
.Map(dest => dest.UserId, src => src.UserId)
|
||||||
|
.Map(dest => dest.UserAddressId, src => src.UserAddressId)
|
||||||
|
.Map(dest => dest.PaymentMethod, src => src.PaymentMethod)
|
||||||
|
.Map(dest => dest.UserAddressText, src => src.UserAddress.Address)
|
||||||
|
.Map(dest => dest.FactorDetails, src => src.FactorDetailss.Select(s=>s.Adapt<GetUserOrderResponseFactorDetail>()))
|
||||||
|
;
|
||||||
|
|
||||||
|
config.NewConfig<FactorDetails,GetUserOrderResponseFactorDetail>()
|
||||||
|
.Map(dest => dest.ProductId, src => src.ProductId)
|
||||||
|
.Map(dest => dest.ProductTitle, src => src.Product.Title)
|
||||||
|
.Map(dest => dest.ProductThumbnailPath, src => src.Product.ThumbnailPath)
|
||||||
|
.Map(dest => dest.UnitPrice, src => src.Product.Price)
|
||||||
|
.Map(dest => dest.Count, src => src.Count)
|
||||||
|
.Map(dest => dest.UnitDiscountPrice, src => src.Product.Price*(src.Product.Discount/100))
|
||||||
|
;
|
||||||
|
|
||||||
|
config.NewConfig<FactorDetails,GetAllUserOrderByFilterResponseModelFactorDetail>()
|
||||||
|
.Map(dest => dest.ProductId, src => src.ProductId)
|
||||||
|
.Map(dest => dest.ProductTitle, src => src.Product.Title)
|
||||||
|
.Map(dest => dest.ProductThumbnailPath, src => src.Product.ThumbnailPath)
|
||||||
|
.Map(dest => dest.UnitPrice, src => src.Product.Price)
|
||||||
|
.Map(dest => dest.Count, src => src.Count)
|
||||||
|
.Map(dest => dest.UnitDiscountPrice, src => src.Product.Price*(src.Product.Discount/100))
|
||||||
|
;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
using CMSMicroservice.Domain.Events;
|
using CMSMicroservice.Domain.Events;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
|
|
||||||
namespace CMSMicroservice.Application.OtpTokenCQ.Commands.VerifyOtpToken;
|
namespace CMSMicroservice.Application.OtpTokenCQ.Commands.VerifyOtpToken;
|
||||||
|
|
||||||
public class VerifyOtpTokenCommandHandler : IRequestHandler<VerifyOtpTokenCommand, VerifyOtpTokenResponseDto>
|
public class VerifyOtpTokenCommandHandler : IRequestHandler<VerifyOtpTokenCommand, VerifyOtpTokenResponseDto>
|
||||||
{
|
{
|
||||||
private readonly IApplicationDbContext _context;
|
private readonly IApplicationDbContext _context;
|
||||||
@@ -14,8 +16,10 @@ public class VerifyOtpTokenCommandHandler : IRequestHandler<VerifyOtpTokenComman
|
|||||||
_hashService = hashService;
|
_hashService = hashService;
|
||||||
}
|
}
|
||||||
|
|
||||||
const int MaxAttempts = 5; // محدودیت تلاش
|
const int MaxAttempts = 5; // محدودیت تلاش
|
||||||
public async Task<VerifyOtpTokenResponseDto> Handle(VerifyOtpTokenCommand request, CancellationToken cancellationToken)
|
|
||||||
|
public async Task<VerifyOtpTokenResponseDto> Handle(VerifyOtpTokenCommand request,
|
||||||
|
CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var mobile = request.Mobile.NormalizeIranMobile();
|
var mobile = request.Mobile.NormalizeIranMobile();
|
||||||
var purpose = request.Purpose?.ToLowerInvariant() ?? "signup";
|
var purpose = request.Purpose?.ToLowerInvariant() ?? "signup";
|
||||||
@@ -26,9 +30,12 @@ public class VerifyOtpTokenCommandHandler : IRequestHandler<VerifyOtpTokenComman
|
|||||||
.OrderByDescending(o => o.Created)
|
.OrderByDescending(o => o.Created)
|
||||||
.FirstOrDefaultAsync(cancellationToken);
|
.FirstOrDefaultAsync(cancellationToken);
|
||||||
|
|
||||||
if (otp is null) return new VerifyOtpTokenResponseDto() { Success = false, Message = "کد پیدا نشد یا منقضی شده است." };
|
if (otp is null)
|
||||||
|
return new VerifyOtpTokenResponseDto() { Success = false, Message = "کد پیدا نشد یا منقضی شده است." };
|
||||||
|
|
||||||
if (otp.Attempts >= MaxAttempts) return new VerifyOtpTokenResponseDto() { Success = false, Message = "تعداد تلاشها زیاد است. دوباره کد بگیرید." };
|
if (otp.Attempts >= MaxAttempts)
|
||||||
|
return new VerifyOtpTokenResponseDto()
|
||||||
|
{ Success = false, Message = "تعداد تلاشها زیاد است. دوباره کد بگیرید." };
|
||||||
|
|
||||||
otp.Attempts++;
|
otp.Attempts++;
|
||||||
|
|
||||||
@@ -50,7 +57,8 @@ public class VerifyOtpTokenCommandHandler : IRequestHandler<VerifyOtpTokenComman
|
|||||||
if (request.ParentReferralCode == null)
|
if (request.ParentReferralCode == null)
|
||||||
return new VerifyOtpTokenResponseDto() { Success = false, Message = "کد معرف الزامی است." };
|
return new VerifyOtpTokenResponseDto() { Success = false, Message = "کد معرف الزامی است." };
|
||||||
|
|
||||||
var parent = await _context.Users.FirstOrDefaultAsync(u => u.ReferralCode == request.ParentReferralCode, cancellationToken: cancellationToken);
|
var parent = await _context.Users.FirstOrDefaultAsync(u => u.ReferralCode == request.ParentReferralCode,
|
||||||
|
cancellationToken: cancellationToken);
|
||||||
if (parent == null)
|
if (parent == null)
|
||||||
return new VerifyOtpTokenResponseDto() { Success = false, Message = "معرف وجود ندارد." };
|
return new VerifyOtpTokenResponseDto() { Success = false, Message = "معرف وجود ندارد." };
|
||||||
|
|
||||||
@@ -70,13 +78,24 @@ public class VerifyOtpTokenCommandHandler : IRequestHandler<VerifyOtpTokenComman
|
|||||||
await _context.Users.AddAsync(user, cancellationToken);
|
await _context.Users.AddAsync(user, cancellationToken);
|
||||||
user.AddDomainEvent(new CreateNewUserEvent(user));
|
user.AddDomainEvent(new CreateNewUserEvent(user));
|
||||||
await _context.SaveChangesAsync(cancellationToken);
|
await _context.SaveChangesAsync(cancellationToken);
|
||||||
await _context.UserRoles.AddAsync(new()
|
|
||||||
|
var userRole = new UserRole
|
||||||
{
|
{
|
||||||
UserId = user.Id,
|
UserId = user.Id,
|
||||||
RoleId = 1,//UserRoleEnum.User
|
RoleId = 1, //UserRoleEnum.User
|
||||||
|
};
|
||||||
},cancellationToken);
|
|
||||||
user.AddDomainEvent(new CreateNewUserEvent(user));
|
await _context.UserRoles.AddAsync(userRole, cancellationToken);
|
||||||
|
user.AddDomainEvent(new CreateNewUserRoleEvent(userRole));
|
||||||
|
|
||||||
|
var userWallet = new UserWallet
|
||||||
|
{
|
||||||
|
UserId = user.Id,
|
||||||
|
Balance = 0,
|
||||||
|
NetworkBalance = 0
|
||||||
|
};
|
||||||
|
await _context.UserWallets.AddAsync(userWallet, cancellationToken);
|
||||||
|
user.AddDomainEvent(new CreateNewUserWalletEvent(userWallet));
|
||||||
await _context.SaveChangesAsync(cancellationToken);
|
await _context.SaveChangesAsync(cancellationToken);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -98,4 +117,4 @@ public class VerifyOtpTokenCommandHandler : IRequestHandler<VerifyOtpTokenComman
|
|||||||
RemainingSeconds = (otp.ExpiresAt - now).Seconds
|
RemainingSeconds = (otp.ExpiresAt - now).Seconds
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -83,26 +83,13 @@ public class
|
|||||||
OrderId = newOrder.Id
|
OrderId = newOrder.Id
|
||||||
});
|
});
|
||||||
await _context.FactorDetailss.AddRangeAsync(factorDetailsList, cancellationToken);
|
await _context.FactorDetailss.AddRangeAsync(factorDetailsList, cancellationToken);
|
||||||
|
user.UserCartss.Clear();
|
||||||
|
await _context.SaveChangesAsync(cancellationToken);
|
||||||
var finalResult = new SubmitShopBuyOrderResponseDto()
|
var finalResult = new SubmitShopBuyOrderResponseDto()
|
||||||
{
|
{
|
||||||
Id = newOrder.Id,
|
Id = newOrder.Id,
|
||||||
PaymentMethod = newOrder.PaymentMethod,
|
|
||||||
PaymentStatus = newOrder.PaymentStatus,
|
|
||||||
TotalAmount = newOrder.Amount,
|
|
||||||
UserAddressText = user.UserAddresss.First(f => f.IsDefault).Address,
|
|
||||||
PaymentDate = newOrder.PaymentDate,
|
|
||||||
FactorDetails = factorDetailsList.Select(s => new SubmitShopBuyOrderFactorDetail()
|
|
||||||
{
|
|
||||||
Count = s.Count,
|
|
||||||
UnitPrice = s.UnitPrice,
|
|
||||||
ProductId = s.ProductId,
|
|
||||||
ProductThumbnailPath = user.UserCartss.First(f => f.ProductId == s.ProductId).Product.ThumbnailPath,
|
|
||||||
ProductTitle = user.UserCartss.First(f => f.ProductId == s.ProductId).Product.Title,
|
|
||||||
UnitDiscountPrice = 0,
|
|
||||||
}).ToList()
|
|
||||||
};
|
};
|
||||||
user.UserCartss.Clear();
|
|
||||||
await _context.SaveChangesAsync(cancellationToken);
|
|
||||||
return finalResult;
|
return finalResult;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
using CMSMicroservice.Domain.Enums;
|
||||||
|
|
||||||
namespace CMSMicroservice.Application.UserOrderCQ.Queries.GetAllUserOrderByFilter;
|
namespace CMSMicroservice.Application.UserOrderCQ.Queries.GetAllUserOrderByFilter;
|
||||||
public class GetAllUserOrderByFilterResponseDto
|
public class GetAllUserOrderByFilterResponseDto
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -12,6 +12,9 @@ public class GetUserOrderQueryHandler : IRequestHandler<GetUserOrderQuery, GetUs
|
|||||||
CancellationToken cancellationToken)
|
CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var response = await _context.UserOrders
|
var response = await _context.UserOrders
|
||||||
|
.Include(i => i.UserAddress)
|
||||||
|
.Include(i => i.FactorDetailss)
|
||||||
|
|
||||||
.AsNoTracking()
|
.AsNoTracking()
|
||||||
.Where(x => x.Id == request.Id)
|
.Where(x => x.Id == request.Id)
|
||||||
.ProjectToType<GetUserOrderResponseDto>()
|
.ProjectToType<GetUserOrderResponseDto>()
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
using CMSMicroservice.Domain.Enums;
|
||||||
|
|
||||||
namespace CMSMicroservice.Application.UserOrderCQ.Queries.GetUserOrder;
|
namespace CMSMicroservice.Application.UserOrderCQ.Queries.GetUserOrder;
|
||||||
public class GetUserOrderResponseDto
|
public class GetUserOrderResponseDto
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<TargetFramework>net9.0</TargetFramework>
|
<TargetFramework>net9.0</TargetFramework>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<Version>0.0.127</Version>
|
<Version>0.0.128</Version>
|
||||||
<DebugType>None</DebugType>
|
<DebugType>None</DebugType>
|
||||||
<DebugSymbols>False</DebugSymbols>
|
<DebugSymbols>False</DebugSymbols>
|
||||||
<GeneratePackageOnBuild>False</GeneratePackageOnBuild>
|
<GeneratePackageOnBuild>False</GeneratePackageOnBuild>
|
||||||
|
|||||||
Reference in New Issue
Block a user