feat(wallet): enforce club membership validation for wallet charge operations
Build and Deploy to Kubernetes / build-and-deploy (push) Failing after 19m57s

- Added club membership inclusion in user retrieval for ChargeCreditWallet and VerifyCreditWalletCharge command handlers.
- Implemented validation to ensure users have an active club membership before allowing wallet charges, throwing a BadRequestException if not.
- Updated UserWalletService to handle BadRequestException and return appropriate error messages in responses.
This commit is contained in:
masoodafar-web
2026-08-06 23:59:36 +03:30
parent ce98efdd68
commit 3810146651
3 changed files with 22 additions and 0 deletions
@@ -55,9 +55,16 @@ public class ChargeCreditWalletCommandHandler
request.Amount);
var user = await _context.Users
.Include(u => u.ClubMembership)
.FirstOrDefaultAsync(u => u.Id == request.UserId, cancellationToken)
?? throw new NotFoundException(nameof(User), request.UserId);
if (user.ClubMembership?.IsActive != true)
{
throw new BadRequestException(
"برای شارژ کیف پول اصلی ابتدا باید پکیج را خریداری کرده و قرارداد باشگاه مشتریان را امضا کنید.");
}
var wallet = await _context.UserWallets
.FirstOrDefaultAsync(w => w.UserId == request.UserId, cancellationToken)
?? throw new NotFoundException("کیف پول کاربر یافت نشد");
@@ -51,9 +51,16 @@ public class VerifyCreditWalletChargeCommandHandler
request.Authority);
var user = await _context.Users
.Include(u => u.ClubMembership)
.FirstOrDefaultAsync(u => u.Id == request.UserId, cancellationToken)
?? throw new NotFoundException(nameof(User), request.UserId);
if (user.ClubMembership?.IsActive != true)
{
throw new BadRequestException(
"برای شارژ کیف پول اصلی ابتدا باید پکیج را خریداری کرده و قرارداد باشگاه مشتریان را امضا کنید.");
}
var paymentTx = await _context.PaymentTransactions
.FirstOrDefaultAsync(pt => pt.Authority == request.Authority, cancellationToken);
@@ -277,6 +277,14 @@ public class UserWalletService : UserWalletContract.UserWalletContractBase
ErrorMessage = ex.Message
};
}
catch (BadRequestException ex)
{
return new InitiateCreditChargeResponse
{
IsSuccess = false,
ErrorMessage = ex.Message
};
}
}
// ============= Wallet Verify Methods =============