Ë
    \_=iÀ  ã                   óX  — d Z ddlmZmZmZmZ ddlmZmZ ddl	m
Z
mZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZN g d¢ZOy)a¹  
Wallet point transaction utilities (Python port of WalletPoint).

Install (from your Django backend folder):
    pip install -e ../packages/wallet_utils

Usage:
    from wallet_utils import WalletService, WalletRepository
    from wallet_utils.exceptions import (
        InsufficientBalanceError,
        InvalidPointTypeError,
        InvalidParamsError,
        WalletOperationError,
    )
    from your_app.models import User
    
    # Define point types and their decimal places
    point_types = {
        "credit_balance": 2,
        "reward_points": 0,
    }
    
    # Create repository (only needs point types definition)
    repo = WalletRepository(
        user_model=User,
        point_types=point_types,
    )
    
    # Use the service
    service = WalletService(repo)
    transaction_id = service.add_point(
        user_id=123,
        point_type="credit_balance",
        amount=Decimal("100.00"),
        remarks="Deposit",
    )
é   )ÚInsufficientBalanceErrorÚInvalidParamsErrorÚInvalidPointTypeErrorÚWalletOperationError)ÚWalletRepositoryÚWalletRepositoryProtocol)ÚTransactionRecordÚWalletService)BÚTRANSACTION_TYPESÚTRANSACTION_TYPE_NAMESÚget_transaction_typeÚget_transaction_type_nameÚWALLET_DEPOSITÚWALLET_DEPOSIT_CANCELÚWALLET_TRANSFERÚWALLET_WITHDRAWÚWALLET_WITHDRAW_REFUNDÚWALLET_ADJUSTÚWALLET_TOPUPÚWALLET_DEDUCTÚPACKAGE_ACTIVATIONÚPACKAGE_ACTIVATION_CANCELÚPACKAGE_UPGRADEÚPACKAGE_UPGRADE_CANCELÚPACKAGE_RENEWALÚPACKAGE_RENEWAL_CANCELÚPACKAGE_EXPIRY_REFUNDÚCOMMISSION_DISTRIBUTIONÚCOMMISSION_DISTRIBUTION_REVERSEÚROI_DISTRIBUTIONÚROI_DISTRIBUTION_REVERSEÚREFERRAL_BONUSÚREFERRAL_BONUS_REVERSEÚMATCHING_BONUSÚMATCHING_BONUS_REVERSEÚLEADERSHIP_BONUSÚLEADERSHIP_BONUS_REVERSEÚPROMOTION_BONUSÚPROMOTION_BONUS_REVERSEÚPRODUCT_ORDERÚPRODUCT_ORDER_CANCELÚPRODUCT_ORDER_REFUNDÚPRODUCT_REDEMPTIONÚPRODUCT_REDEMPTION_CANCELÚPRODUCT_EXCHANGEÚPRODUCT_EXCHANGE_REVERSEÚSYSTEM_ADJUSTMENTÚSYSTEM_REWARDÚSYSTEM_PENALTYÚSYSTEM_REVERSALÚSYSTEM_MIGRATIONÚPAYMENT_RECEIVEDÚPAYMENT_REFUNDÚPAYMENT_FAILED_REFUNDÚPAYMENT_CHARGEBACKÚPAYMENT_CHARGEBACK_REVERSALÚLOAN_DISBURSEMENTÚLOAN_REPAYMENTÚLOAN_WRITE_OFFÚCREDIT_LIMIT_INCREASEÚCREDIT_LIMIT_DECREASEÚCURRENCY_EXCHANGEÚPOINT_CONVERSIONÚPOINT_CONVERSION_REVERSEÚBONUS_CONVERSIONÚBONUS_CONVERSION_REVERSEÚTRANSACTION_FEEÚTRANSACTION_FEE_REFUNDÚWITHDRAWAL_FEEÚWITHDRAWAL_FEE_REFUNDÚTRANSFER_FEEÚTRANSFER_FEE_REFUNDÚMAINTENANCE_FEEÚMAINTENANCE_FEE_REFUND)Jr   r   r   r	   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   r   r   r   r
   N)PÚ__doc__Ú
exceptionsr   r   r   r   Ú
repositoryr   r   Úservicer	   r
   Útransaction_typesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   Ú__all__© ó    úX/home/cursorai/projects/telegram-earn/packages/wallet_utils/src/wallet_utils/__init__.pyÚ<module>rV      s�   ðñ$÷Ló ÷ Cß 5÷L÷ L÷ L÷ L÷ L÷ L÷ L÷ L÷ L÷ L÷ L÷ L÷ L÷ L÷ L÷ L÷ Lò\T�rT   