refaktorálás javításai
This commit is contained in:
187
backend/app/services/financial_interfaces.py
Normal file
187
backend/app/services/financial_interfaces.py
Normal file
@@ -0,0 +1,187 @@
|
||||
"""
|
||||
Financial Interfaces - Absztrakt alaposztályok a fizetési és számlázási szolgáltatásokhoz.
|
||||
|
||||
Ez a modul definiálja a kötelező interfészeket, amelyeket minden konkrét implementációnak
|
||||
követnie kell a fizetési átjárók és számlázási szolgáltatások esetében.
|
||||
"""
|
||||
|
||||
from abc import ABC, abstractmethod
|
||||
from typing import Optional, Dict, Any
|
||||
from decimal import Decimal
|
||||
|
||||
|
||||
class BasePaymentGateway(ABC):
|
||||
"""
|
||||
Absztrakt osztály fizetési átjárók számára.
|
||||
|
||||
Minden fizetési szolgáltató (Stripe, PayPal, stb.) implementálja ezt az interfészt,
|
||||
hogy a FinancialOrchestrator egységesen kezelhesse őket.
|
||||
"""
|
||||
|
||||
@abstractmethod
|
||||
async def create_intent(
|
||||
self,
|
||||
amount: Decimal,
|
||||
currency: str = "HUF",
|
||||
metadata: Optional[Dict[str, Any]] = None,
|
||||
**kwargs
|
||||
) -> Dict[str, Any]:
|
||||
"""
|
||||
Fizetési szándék létrehozása a külső szolgáltatónál.
|
||||
|
||||
Args:
|
||||
amount: A fizetendő összeg
|
||||
currency: Pénznem (alapértelmezett: HUF)
|
||||
metadata: Egyéni metaadatok
|
||||
**kwargs: További paraméterek a konkrét implementáció számára
|
||||
|
||||
Returns:
|
||||
Szótár a fizetési szándék adataival (pl. client_secret, id, status)
|
||||
|
||||
Raises:
|
||||
PaymentGatewayError: Ha a fizetési szándék létrehozása sikertelen
|
||||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
async def verify_payment(
|
||||
self,
|
||||
payment_intent_id: str,
|
||||
**kwargs
|
||||
) -> Dict[str, Any]:
|
||||
"""
|
||||
Fizetés státuszának ellenőrzése a külső szolgáltatónál.
|
||||
|
||||
Args:
|
||||
payment_intent_id: A fizetési szándék azonosítója
|
||||
**kwargs: További paraméterek
|
||||
|
||||
Returns:
|
||||
Szótár a fizetés részleteivel (pl. status, amount, customer)
|
||||
|
||||
Raises:
|
||||
PaymentGatewayError: Ha az ellenőrzés sikertelen
|
||||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
async def refund_payment(
|
||||
self,
|
||||
payment_intent_id: str,
|
||||
amount: Optional[Decimal] = None,
|
||||
**kwargs
|
||||
) -> Dict[str, Any]:
|
||||
"""
|
||||
Fizetés visszatérítése.
|
||||
|
||||
Args:
|
||||
payment_intent_id: A fizetési szándék azonosítója
|
||||
amount: Visszatérítendő összeg (ha None, akkor teljes összeg)
|
||||
**kwargs: További paraméterek
|
||||
|
||||
Returns:
|
||||
Szótár a visszatérítés részleteivel
|
||||
|
||||
Raises:
|
||||
PaymentGatewayError: Ha a visszatérítés sikertelen
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
class BaseInvoicingService(ABC):
|
||||
"""
|
||||
Absztrakt osztály számlázási szolgáltatások számára.
|
||||
|
||||
Minden számlázási rendszer (számlázz.hu, NAV Online Számla, stb.) implementálja
|
||||
ezt az interfészt a számlák egységes kezeléséhez.
|
||||
"""
|
||||
|
||||
@abstractmethod
|
||||
async def issue_invoice(
|
||||
self,
|
||||
issuer_id: int,
|
||||
customer_data: Dict[str, Any],
|
||||
items: list[Dict[str, Any]],
|
||||
**kwargs
|
||||
) -> Dict[str, Any]:
|
||||
"""
|
||||
Szála kiállítása.
|
||||
|
||||
Args:
|
||||
issuer_id: A számlakiállító (Issuer) azonosítója
|
||||
customer_data: Ügyfél adatok (név, cím, adószám, stb.)
|
||||
items: Számla tételek listája
|
||||
**kwargs: További paraméterek
|
||||
|
||||
Returns:
|
||||
Szótár a számla részleteivel (pl. invoice_number, issue_date, total_amount)
|
||||
|
||||
Raises:
|
||||
InvoicingError: Ha a számla kiállítása sikertelen
|
||||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
async def get_invoice_status(
|
||||
self,
|
||||
invoice_id: str,
|
||||
**kwargs
|
||||
) -> Dict[str, Any]:
|
||||
"""
|
||||
Számla státuszának lekérdezése.
|
||||
|
||||
Args:
|
||||
invoice_id: A számla azonosítója
|
||||
**kwargs: További paraméterek
|
||||
|
||||
Returns:
|
||||
Szótár a számla státuszával és további adatokkal
|
||||
|
||||
Raises:
|
||||
InvoicingError: Ha a státusz lekérdezése sikertelen
|
||||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
async def cancel_invoice(
|
||||
self,
|
||||
invoice_id: str,
|
||||
reason: Optional[str] = None,
|
||||
**kwargs
|
||||
) -> Dict[str, Any]:
|
||||
"""
|
||||
Számla érvénytelenítése.
|
||||
|
||||
Args:
|
||||
invoice_id: A számla azonosítója
|
||||
reason: Érvénytelenítés oka
|
||||
**kwargs: További paraméterek
|
||||
|
||||
Returns:
|
||||
Szótár az érvénytelenítés eredményével
|
||||
|
||||
Raises:
|
||||
InvoicingError: Ha az érvénytelenítés sikertelen
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
# Egyéni kivételek a finanszírozási szolgáltatásokhoz
|
||||
class FinancialServiceError(Exception):
|
||||
"""Alap kivétel az összes finanszírozási szolgáltatási hibához."""
|
||||
pass
|
||||
|
||||
|
||||
class PaymentGatewayError(FinancialServiceError):
|
||||
"""Kivétel fizetési átjáró hibákhoz."""
|
||||
pass
|
||||
|
||||
|
||||
class InvoicingError(FinancialServiceError):
|
||||
"""Kivétel számlázási hibákhoz."""
|
||||
pass
|
||||
|
||||
|
||||
class InsufficientFundsError(FinancialServiceError):
|
||||
"""Kivétel elégtelen egyenleg esetén."""
|
||||
pass
|
||||
Reference in New Issue
Block a user