This commit is contained in:
masoodafar-web
2025-11-25 00:39:31 +03:30
parent 25eee4ede3
commit a2d293ed01
18 changed files with 2705 additions and 2633 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -1,3 +1,5 @@
using CMSMicroservice.Domain.Enums;
namespace CMSMicroservice.Application.TransactionsCQ.Commands.CreateNewTransactions; namespace CMSMicroservice.Application.TransactionsCQ.Commands.CreateNewTransactions;
public record CreateNewTransactionsCommand : IRequest<CreateNewTransactionsResponseDto> public record CreateNewTransactionsCommand : IRequest<CreateNewTransactionsResponseDto>
{ {

View File

@@ -1,3 +1,5 @@
using CMSMicroservice.Domain.Enums;
namespace CMSMicroservice.Application.TransactionsCQ.Commands.UpdateTransactions; namespace CMSMicroservice.Application.TransactionsCQ.Commands.UpdateTransactions;
public record UpdateTransactionsCommand : IRequest<Unit> public record UpdateTransactionsCommand : IRequest<Unit>
{ {

View File

@@ -1,3 +1,5 @@
using CMSMicroservice.Domain.Enums;
namespace CMSMicroservice.Application.TransactionsCQ.Queries.GetAllTransactionsByFilter; namespace CMSMicroservice.Application.TransactionsCQ.Queries.GetAllTransactionsByFilter;
public record GetAllTransactionsByFilterQuery : IRequest<GetAllTransactionsByFilterResponseDto> public record GetAllTransactionsByFilterQuery : IRequest<GetAllTransactionsByFilterResponseDto>
{ {

View File

@@ -18,26 +18,11 @@ public class GetAllTransactionsByFilterQueryHandler : IRequestHandler<GetAllTran
{ {
query = query query = query
.Where(x => request.Filter.Id == null || x.Id == request.Filter.Id) .Where(x => request.Filter.Id == null || x.Id == request.Filter.Id)
.Where(x => request.Filter.MerchantId == null || x.MerchantId.Contains(request.Filter.MerchantId))
.Where(x => request.Filter.Amount == null || x.Amount == request.Filter.Amount) .Where(x => request.Filter.Amount == null || x.Amount == request.Filter.Amount)
.Where(x => request.Filter.CallbackUrl == null || x.CallbackUrl.Contains(request.Filter.CallbackUrl))
.Where(x => request.Filter.Description == null || x.Description.Contains(request.Filter.Description)) .Where(x => request.Filter.Description == null || x.Description.Contains(request.Filter.Description))
.Where(x => request.Filter.Mobile == null || x.Mobile.Contains(request.Filter.Mobile)) .Where(x => request.Filter.PaymentStatus == null || x.PaymentStatus== request.Filter.PaymentStatus)
.Where(x => request.Filter.Email == null || x.Email.Contains(request.Filter.Email))
.Where(x => request.Filter.RequestStatusCode == null || x.RequestStatusCode == request.Filter.RequestStatusCode)
.Where(x => request.Filter.RequestStatusMessage == null || x.RequestStatusMessage.Contains(request.Filter.RequestStatusMessage))
.Where(x => request.Filter.Authority == null || x.Authority.Contains(request.Filter.Authority))
.Where(x => request.Filter.FeeType == null || x.FeeType.Contains(request.Filter.FeeType))
.Where(x => request.Filter.Fee == null || x.Fee == request.Filter.Fee)
.Where(x => request.Filter.Currency == null || x.Currency == request.Filter.Currency)
.Where(x => request.Filter.PaymentStatus == null || x.PaymentStatus == request.Filter.PaymentStatus)
.Where(x => request.Filter.PaymentDate == null || x.PaymentDate == request.Filter.PaymentDate) .Where(x => request.Filter.PaymentDate == null || x.PaymentDate == request.Filter.PaymentDate)
.Where(x => request.Filter.VerificationStatusCode == null || x.VerificationStatusCode == request.Filter.VerificationStatusCode)
.Where(x => request.Filter.VerificationStatusMessage == null || x.VerificationStatusMessage.Contains(request.Filter.VerificationStatusMessage))
.Where(x => request.Filter.CardHash == null || x.CardHash.Contains(request.Filter.CardHash))
.Where(x => request.Filter.CardPan == null || x.CardPan.Contains(request.Filter.CardPan))
.Where(x => request.Filter.RefId == null || x.RefId.Contains(request.Filter.RefId)) .Where(x => request.Filter.RefId == null || x.RefId.Contains(request.Filter.RefId))
.Where(x => request.Filter.OrderId == null || x.OrderId==request.Filter.OrderId)
.Where(x => request.Filter.Type == null || x.Type == request.Filter.Type) .Where(x => request.Filter.Type == null || x.Type == request.Filter.Type)
; ;
} }

View File

@@ -1,3 +1,5 @@
using CMSMicroservice.Domain.Enums;
namespace CMSMicroservice.Application.TransactionsCQ.Queries.GetAllTransactionsByFilter; namespace CMSMicroservice.Application.TransactionsCQ.Queries.GetAllTransactionsByFilter;
public class GetAllTransactionsByFilterResponseDto public class GetAllTransactionsByFilterResponseDto
{ {

View File

@@ -1,3 +1,5 @@
using CMSMicroservice.Domain.Enums;
namespace CMSMicroservice.Application.TransactionsCQ.Queries.GetTransactions; namespace CMSMicroservice.Application.TransactionsCQ.Queries.GetTransactions;
public class GetTransactionsResponseDto public class GetTransactionsResponseDto
{ {

View File

@@ -1,3 +1,5 @@
using CMSMicroservice.Domain.Enums;
namespace CMSMicroservice.Application.UserOrderCQ.Commands.CreateNewUserOrder; namespace CMSMicroservice.Application.UserOrderCQ.Commands.CreateNewUserOrder;
public record CreateNewUserOrderCommand : IRequest<CreateNewUserOrderResponseDto> public record CreateNewUserOrderCommand : IRequest<CreateNewUserOrderResponseDto>
{ {

View File

@@ -19,7 +19,7 @@ public class CreateNewUserOrderCommandHandler : IRequestHandler<CreateNewUserOrd
.FirstOrDefaultAsync(x => x.Id == request.PackageId, cancellationToken) ?? throw new NotFoundException(nameof(Package), request.PackageId); .FirstOrDefaultAsync(x => x.Id == request.PackageId, cancellationToken) ?? throw new NotFoundException(nameof(Package), request.PackageId);
var entity = request.Adapt<UserOrder>(); var entity = request.Adapt<UserOrder>();
entity.Price = package.Price; entity.Amount = package.Price;
await _context.UserOrders.AddAsync(entity, cancellationToken); await _context.UserOrders.AddAsync(entity, cancellationToken);
entity.AddDomainEvent(new CreateNewUserOrderEvent(entity)); entity.AddDomainEvent(new CreateNewUserOrderEvent(entity));
await _context.SaveChangesAsync(cancellationToken); await _context.SaveChangesAsync(cancellationToken);

View File

@@ -18,30 +18,77 @@ public class
{ {
var user = await _context.Users var user = await _context.Users
.Include(i => i.UserAddresss) .Include(i => i.UserAddresss)
.Include(i => i.UserWallets)
.ThenInclude(i => i.UserWalletChangeLogs)
.Include(i => i.UserCartss) .Include(i => i.UserCartss)
.ThenInclude(i => i.Product) .ThenInclude(i => i.Product)
.FirstOrDefaultAsync(w => w.Id == request.UserId, cancellationToken: cancellationToken); .FirstOrDefaultAsync(w => w.Id == request.UserId, cancellationToken: cancellationToken);
if (user.UserCartss.Count == 0) if (user.UserCartss.Count == 0)
throw new NotFoundException("UserCart", request.UserId); throw new NotFoundException("UserCart", request.UserId);
if (user.UserCartss.Sum(s => s.Count * s.Product.Price) != request.TotalAmount) if (user.UserCartss.Sum(s => s.Count * s.Product.Price) != request.TotalAmount)
throw new Exception("مبلغ سفارش با مجموع سبد خرید مطابقت ندارد."); throw new Exception("مبلغ سفارش با مجموع سبد خرید مطابقت ندارد.");
await _context.UserOrders.AddAsync(new UserOrder()
var userWallet = user.UserWallets.FirstOrDefault();
if (userWallet == null)
throw new Exception("کیف پول کاربر یافت نشد.");
var newTransaction = new Transactions()
{ {
Price = request.TotalAmount, Amount = request.TotalAmount,
Description = "خرید از فروشگاه",
PaymentStatus = PaymentStatus.Success,
PaymentDate = DateTime.Now,
Type = TransactionType.Buy,
RefId = "localwallet-" + Guid.NewGuid().ToString()
};
await _context.Transactionss.AddAsync(newTransaction, cancellationToken);
await _context.SaveChangesAsync(cancellationToken);
var newWalletLog = new UserWalletChangeLog()
{
CurrentBalance = userWallet.Balance,
ChangeValue = -1*request.TotalAmount,
IsIncrease = false,
RefrenceId = newTransaction.Id
};
userWallet.Balance -= request.TotalAmount;
await _context.UserWalletChangeLogs.AddAsync(newWalletLog, cancellationToken);
await _context.SaveChangesAsync(cancellationToken);
var newOrder = new UserOrder()
{
Amount = request.TotalAmount,
PaymentStatus = PaymentStatus.Success, PaymentStatus = PaymentStatus.Success,
PaymentMethod = PaymentMethod.Wallet, PaymentMethod = PaymentMethod.Wallet,
PaymentDate =DateTime.Now, PaymentDate = DateTime.Now,
UserId = request.UserId, UserId = request.UserId,
UserAddressId = user.UserAddresss.First(f=>f.IsDefault).Id UserAddressId = user.UserAddresss.First(f => f.IsDefault).Id,
}, cancellationToken); TransactionId = newTransaction.Id
};
await _context.UserOrders.AddAsync(newOrder, cancellationToken);
await _context.SaveChangesAsync(cancellationToken);
await _context.FactorDetailss.AddRangeAsync(user.UserCartss.Select(s => new FactorDetails() await _context.FactorDetailss.AddRangeAsync(user.UserCartss.Select(s => new FactorDetails()
{ {
ProductId = s.ProductId, ProductId = s.ProductId,
Count = s.Count, Count = s.Count,
UnitPrice = s.Product.Price, UnitPrice = s.Product.Price,
OrderId = newOrder.Id
}), cancellationToken); }), cancellationToken);
return new SubmitShopBuyOrderResponseDto(); user.UserCartss.Clear();
await _context.SaveChangesAsync(cancellationToken);
return new SubmitShopBuyOrderResponseDto()
{
Id = newOrder.Id,
PaymentMethod = newOrder.PaymentMethod,
PaymentStatus = newOrder.PaymentStatus,
TotalAmount = newOrder.Amount,
UserAddressText = user.UserAddresss.First(f => f.IsDefault).Address,
Created = newOrder.PaymentDate
};
} }
} }

View File

@@ -1,3 +1,5 @@
using CMSMicroservice.Domain.Enums;
namespace CMSMicroservice.Application.UserOrderCQ.Commands.UpdateUserOrder; namespace CMSMicroservice.Application.UserOrderCQ.Commands.UpdateUserOrder;
public record UpdateUserOrderCommand : IRequest<Unit> public record UpdateUserOrderCommand : IRequest<Unit>
{ {

View File

@@ -1,3 +1,5 @@
using CMSMicroservice.Domain.Enums;
namespace CMSMicroservice.Application.UserOrderCQ.Queries.GetAllUserOrderByFilter; namespace CMSMicroservice.Application.UserOrderCQ.Queries.GetAllUserOrderByFilter;
public record GetAllUserOrderByFilterQuery : IRequest<GetAllUserOrderByFilterResponseDto> public record GetAllUserOrderByFilterQuery : IRequest<GetAllUserOrderByFilterResponseDto>
{ {

View File

@@ -18,7 +18,7 @@ public class GetAllUserOrderByFilterQueryHandler : IRequestHandler<GetAllUserOrd
{ {
query = query query = query
.Where(x => request.Filter.Id == null || x.Id == request.Filter.Id) .Where(x => request.Filter.Id == null || x.Id == request.Filter.Id)
.Where(x => request.Filter.Price == null || x.Price == request.Filter.Price) .Where(x => request.Filter.Amount == null || x.Amount == request.Filter.Amount)
.Where(x => request.Filter.PackageId == null || x.PackageId == request.Filter.PackageId) .Where(x => request.Filter.PackageId == null || x.PackageId == request.Filter.PackageId)
.Where(x => request.Filter.TransactionId == null || x.TransactionId == request.Filter.TransactionId) .Where(x => request.Filter.TransactionId == null || x.TransactionId == request.Filter.TransactionId)
.Where(x => request.Filter.PaymentStatus == null || x.PaymentStatus.GetHashCode() == request.Filter.PaymentStatus.Value.GetHashCode()) .Where(x => request.Filter.PaymentStatus == null || x.PaymentStatus.GetHashCode() == request.Filter.PaymentStatus.Value.GetHashCode())

View File

@@ -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
{ {

View File

@@ -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
{ {

View File

@@ -1,3 +1,5 @@
using CMSMicroservice.Domain.Enums;
namespace CMSMicroservice.Domain.Entities; namespace CMSMicroservice.Domain.Entities;
//آدرس کاربر //آدرس کاربر
public class Transactions : BaseAuditableEntity public class Transactions : BaseAuditableEntity

View File

@@ -1,3 +1,5 @@
using CMSMicroservice.Domain.Enums;
namespace CMSMicroservice.Domain.Entities; namespace CMSMicroservice.Domain.Entities;
//سفارش کاربر //سفارش کاربر
public class UserOrder : BaseAuditableEntity public class UserOrder : BaseAuditableEntity

View File

@@ -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.124</Version> <Version>0.0.125</Version>
<DebugType>None</DebugType> <DebugType>None</DebugType>
<DebugSymbols>False</DebugSymbols> <DebugSymbols>False</DebugSymbols>
<GeneratePackageOnBuild>False</GeneratePackageOnBuild> <GeneratePackageOnBuild>False</GeneratePackageOnBuild>