from dataclasses import dataclass
from typing import Optional
from .types import PaymentResult, CardDetails
from ..utils.logger import Logger
class PaymentService:
def __init__(self, client, logger: Logger):
self._client = client
self._logger = logger
async def process_payment(self, amount: float, user_id: str) -> PaymentResult:
self._logger.info(f"Processing payment for {user_id}")
return await self._client.charge(amount, user_id)
def refund(self, tx_id: str, reason: Optional[str] = None) -> bool:
return self._client.refund(tx_id, reason)
@staticmethod
def validate_card(card: CardDetails) -> bool:
return card.number is not None
@property
def is_connected(self) -> bool:
return self._client.connected
def _calculate_fee(self, amount: float) -> float:
return amount * 0.029
def __apply_discount(self, amount: float, code: str) -> float:
return amount * 0.9