feat: Implement customer profile and referral queries

- Add GetCustomerProfileResponseDto for retrieving customer profile information.
- Create GetCustomerReferralsQuery and GetCustomerReferralsQueryHandler to fetch customer referrals with pagination and filtering options.
- Introduce GetCustomerReferralsResponseDto to structure the response for customer referrals.
- Implement GetCustomerSettingsQuery and GetCustomerSettingsQueryHandler to retrieve user settings.
- Add GetCustomerOrder and GetCustomerOrderQueryHandler for fetching specific customer orders.
- Create GetCustomerOrderHistoryQuery and GetCustomerOrderHistoryQueryHandler to retrieve order history with filtering options.
- Implement GetCustomerOrdersQuery and GetCustomerOrdersQueryHandler for fetching multiple customer orders with filters.
- Add GetCustomerWalletChangeLogQuery and GetCustomerWalletChangeLogQueryHandler for retrieving wallet change logs.
- Implement GetCustomerWithdrawalSettingsQuery and GetCustomerWithdrawalSettingsQueryHandler for fetching withdrawal settings.
- Create GetCustomerWithdrawalsQuery and GetCustomerWithdrawalsQueryHandler to retrieve customer withdrawal requests.
This commit is contained in:
masoodafar-web
2026-02-05 23:01:50 +03:30
parent b41342dcad
commit b2d676b555
96 changed files with 4822 additions and 589 deletions
@@ -7,15 +7,22 @@ using CMSMicroservice.Application.TransactionsCQ.Queries.GetTransactions;
using CMSMicroservice.Application.TransactionsCQ.Queries.GetAllTransactionsByFilter;
using CMSMicroservice.Application.TransactionsCQ.Commands.VerifyTransaction;
using CMSMicroservice.Application.TransactionsCQ.Commands.RefundTransaction;
using CMSMicroservice.Application.TransactionsCQ.Queries.GetCustomerTransaction;
using CMSMicroservice.Application.TransactionsCQ.Queries.GetCustomerTransactionsByFilter;
using AppModels = CMSMicroservice.Application.Common.Models;
using MediatR;
using Mapster;
namespace CMSMicroservice.WebApi.Services;
public class TransactionsService : TransactionsContract.TransactionsContractBase
{
private readonly IDispatchRequestToCQRS _dispatchRequestToCQRS;
private readonly ISender _sender;
public TransactionsService(IDispatchRequestToCQRS dispatchRequestToCQRS)
public TransactionsService(IDispatchRequestToCQRS dispatchRequestToCQRS, ISender sender)
{
_dispatchRequestToCQRS = dispatchRequestToCQRS;
_sender = sender;
}
public override async Task<CreateNewTransactionsResponse> CreateNewTransactions(CreateNewTransactionsRequest request, ServerCallContext context)
{
@@ -52,87 +59,64 @@ public class TransactionsService : TransactionsContract.TransactionsContractBase
public override async Task<GetCustomerTransactionResponse> GetCustomerTransaction(GetCustomerTransactionRequest request, ServerCallContext context)
{
// Mock response for customer transaction
var query = new GetCustomerTransactionQuery
{
Id = request.Id,
Authority = request.Authority,
UserId = 0 // از JWT دریافت می‌شود
};
var result = await _sender.Send(query, context.CancellationToken);
return new GetCustomerTransactionResponse
{
Id = request.Id ?? 1,
MerchantId = "MERCHANT123",
Amount = 150000,
CallbackUrl = "https://mysite.com/callback",
Description = "خرید محصولات",
Mobile = "09123456789",
Email = "customer@example.com",
RequestStatusCode = 100,
RequestStatusMessage = "Success",
Authority = request.Authority ?? "A0000000000000000000000000001234567",
FeeType = "Payer",
Fee = 1500,
Currency = CurrencyEnum.Irr,
PaymentStatus = true,
VerificationStatusCode = 101,
VerificationStatusMessage = "Verified",
CardHash = "4F8A56B2C1D3E9A7B5C2F1E8D6A9B4C7E3F2A1D5",
CardPan = "622106******4567",
RefId = "REF123456789",
OrderId = "ORDER001",
Type = TransactionTypeEnum.Real
Id = result.Id,
Amount = result.Amount,
Description = result.Description,
PaymentStatus = result.PaymentStatus == Domain.Enums.PaymentStatus.Success,
RefId = result.RefId,
Type = (TransactionTypeEnum)result.Type,
Currency = CurrencyEnum.Irr
};
}
public override async Task<GetCustomerTransactionsByFilterResponse> GetCustomerTransactionsByFilter(GetCustomerTransactionsByFilterRequest request, ServerCallContext context)
{
// Mock response for customer transactions list
return new GetCustomerTransactionsByFilterResponse
var query = new GetCustomerTransactionsByFilterQuery
{
MetaData = new CMSMicroservice.Protobuf.Protos.MetaData
{
CurrentPage = 1,
TotalPage = 1,
PageSize = 10,
TotalCount = 2,
HasPrevious = false,
HasNext = false
},
Models =
{
new GetCustomerTransactionsByFilterResponseModel
{
Id = 1,
MerchantId = "MERCHANT123",
Amount = 150000,
CallbackUrl = "https://mysite.com/callback",
Description = "خرید محصولات",
Mobile = "09123456789",
Email = "customer@example.com",
Authority = "A0000000000000000000000000001234567",
Fee = 1500,
Currency = CurrencyEnum.Irr,
PaymentStatus = true,
CardHash = "4F8A56B2C1D3E9A7B5C2F1E8D6A9B4C7E3F2A1D5",
CardPan = "622106******4567",
RefId = "REF123456789",
OrderId = "ORDER001",
Type = TransactionTypeEnum.Real
},
new GetCustomerTransactionsByFilterResponseModel
{
Id = 2,
MerchantId = "MERCHANT123",
Amount = 75000,
CallbackUrl = "https://mysite.com/callback",
Description = "تست پرداخت",
Mobile = "09123456789",
Email = "customer@example.com",
Authority = "A0000000000000000000000000001234568",
Fee = 750,
Currency = CurrencyEnum.Irr,
PaymentStatus = false,
RefId = "REF123456790",
OrderId = "ORDER002",
Type = TransactionTypeEnum.Sandbox
}
}
UserId = 0, // از JWT دریافت می‌شود
PaginationState = request.PaginationState?.Adapt<AppModels.PaginationState>(),
SortBy = request.SortBy,
IdFilter = request.Filter?.Id,
AmountFilter = request.Filter?.Amount,
DescriptionFilter = request.Filter?.Description,
PaymentStatusFilter = request.Filter?.PaymentStatus,
RefIdFilter = request.Filter?.RefId,
TypeFilter = request.Filter?.Type != null ? (int?)request.Filter.Type : null
};
var result = await _sender.Send(query, context.CancellationToken);
var response = new GetCustomerTransactionsByFilterResponse
{
MetaData = result.MetaData.Adapt<CMSMicroservice.Protobuf.Protos.MetaData>()
};
foreach (var model in result.Models)
{
response.Models.Add(new GetCustomerTransactionsByFilterResponseModel
{
Id = model.Id,
Amount = model.Amount,
Description = model.Description,
PaymentStatus = model.PaymentStatus == Domain.Enums.PaymentStatus.Success,
RefId = model.RefId,
Type = (TransactionTypeEnum)model.Type,
Currency = CurrencyEnum.Irr
});
}
return response;
}
public override async Task<CustomerPaymentRequestResponse> CustomerPaymentRequest(CustomerPaymentRequestRequest request, ServerCallContext context)