feat: update logger logic

This commit is contained in:
2026-05-11 15:33:08 +03:00
parent 3e9625fb86
commit 1c32bdcb3f
8 changed files with 22 additions and 12 deletions

View File

@@ -1,16 +1,16 @@
from __future__ import annotations from __future__ import annotations
from decimal import Decimal from decimal import Decimal
from ulid import ULID
from src.application.abstractions import IUnitOfWork from src.application.abstractions import IUnitOfWork
from src.application.contracts import IReceipt from src.application.contracts import ILogger,IReceipt
from src.application.domain.exceptions import ApplicationException from src.application.domain.exceptions import ApplicationException
from src.infrastructure.database.decorators import transactional from src.infrastructure.database.decorators import transactional
class CreateCryptoTransferCompletedCommand: class CreateCryptoTransferCompletedCommand:
def __init__(self, *, unit_of_work: IUnitOfWork, receipt: IReceipt): def __init__(self, *, unit_of_work: IUnitOfWork, receipt: IReceipt, logger: ILogger):
self._unit_of_work = unit_of_work self._unit_of_work = unit_of_work
self._receipt = receipt self._receipt = receipt
self._logger = logger
@transactional @transactional
@@ -72,7 +72,7 @@ class CreateCryptoTransferCompletedCommand:
customer_info=customer_info, customer_info=customer_info,
customer_inn=customer_inn, customer_inn=customer_inn,
customer_birthday=customer_birthday, customer_birthday=customer_birthday,
request_id=str(ULID()), request_id=self._logger.get_trace_id(),
) )
receipt_model = receipt_response.get('Model') receipt_model = receipt_response.get('Model')
if not isinstance(receipt_model, dict): if not isinstance(receipt_model, dict):

View File

@@ -66,7 +66,7 @@ class CreateOrderCommand:
) )
saved = await self._unit_of_work.order_repository.create(order) saved = await self._unit_of_work.order_repository.create(order)
with_itpay = await self._itpay_service.create_payment(saved) with_itpay = await self._itpay_service.create_payment(saved,self._logger.get_trace_id())
if with_itpay.status in ( if with_itpay.status in (
OrderStatus.CANCELLED, OrderStatus.CANCELLED,
OrderStatus.REJECTED, OrderStatus.REJECTED,

View File

@@ -21,6 +21,8 @@ class CreatePaymentCommand:
metadata = payment.metadata or {} metadata = payment.metadata or {}
order_id = str(metadata.get('order_id') or '') order_id = str(metadata.get('order_id') or '')
user_id = str(metadata.get('user_id') or '') user_id = str(metadata.get('user_id') or '')
trace_id = str(metadata.get('trace_id') or self._logger.get_trace_id())
self._logger.set_trace_id(trace_id)
if not order_id: if not order_id:
raise ApplicationException(status_code=400, message='Itpay webhook metadata missing order_id') raise ApplicationException(status_code=400, message='Itpay webhook metadata missing order_id')
if not user_id: if not user_id:
@@ -40,7 +42,7 @@ class CreatePaymentCommand:
message: dict[str,str] = { message: dict[str,str] = {
'order_id': order_id, 'order_id': order_id,
'user_id': user_id, 'user_id': user_id,
'trace_id': self._logger.get_trace_id(), 'trace_id': trace_id,
'message_id': message_id, 'message_id': message_id,
} }
await self._queue_messanger.publish_to_queue( await self._queue_messanger.publish_to_queue(
@@ -48,4 +50,5 @@ class CreatePaymentCommand:
message=message, message=message,
message_id=message_id, message_id=message_id,
correlation_id=message['trace_id'], correlation_id=message['trace_id'],
headers={'trace_id': trace_id},
) )

View File

@@ -7,5 +7,5 @@ class IItPayService(ABC):
@abstractmethod @abstractmethod
async def create_payment(self,order: OrderEntity) -> OrderEntity: async def create_payment(self,order: OrderEntity,trace_id: str) -> OrderEntity:
pass pass

View File

@@ -26,11 +26,12 @@ class ItPayClient(IItPayService):
self._api_secret = api_secret self._api_secret = api_secret
self._timeout = ClientTimeout(total=timeout_seconds) self._timeout = ClientTimeout(total=timeout_seconds)
async def create_payment(self, order: OrderEntity) -> OrderEntity: async def create_payment(self, order: OrderEntity, trace_id: str) -> OrderEntity:
total = order.total_price if order.total_price is not None else Decimal('0') total = order.total_price if order.total_price is not None else Decimal('0')
amount = total if isinstance(total, Decimal) else Decimal(str(total)) amount = total if isinstance(total, Decimal) else Decimal(str(total))
amount_str = str(amount.quantize(Decimal('0.01'))) amount_str = str(amount.quantize(Decimal('0.01')))
metadata: dict[str,Any] = { metadata: dict[str,Any] = {
'trace_id': trace_id,
'order_id': order.id, 'order_id': order.id,
'user_id': order.user_id, 'user_id': order.user_id,
'usdt_amount': str(order.usdt_amount) if order.usdt_amount is not None else None, 'usdt_amount': str(order.usdt_amount) if order.usdt_amount is not None else None,

View File

@@ -56,7 +56,8 @@ def get_cloud_kassir_receipt() -> IReceipt:
def get_crypto_transfer_completed_command( def get_crypto_transfer_completed_command(
logger: ILogger = Depends(get_logger),
unit_of_work: IUnitOfWork = Depends(get_unit_of_work), unit_of_work: IUnitOfWork = Depends(get_unit_of_work),
receipt: IReceipt = Depends(get_cloud_kassir_receipt), receipt: IReceipt = Depends(get_cloud_kassir_receipt),
) -> CreateCryptoTransferCompletedCommand: ) -> CreateCryptoTransferCompletedCommand:
return CreateCryptoTransferCompletedCommand(unit_of_work=unit_of_work,receipt=receipt) return CreateCryptoTransferCompletedCommand(unit_of_work=unit_of_work,receipt=receipt,logger=logger)

View File

@@ -16,7 +16,7 @@ crypto_transfer_router=RabbitRouter(settings.RABBIT_URL)
class CryptoTransferCompletedMessage(BaseModel): class CryptoTransferCompletedMessage(BaseModel):
user_id: str user_id: str
order_id: str order_id: str
trace_id: str trace_id: str | None = None
message_id: str message_id: str
web3_transaction_hash: str | None = None web3_transaction_hash: str | None = None
transaction_hash: str | None = None transaction_hash: str | None = None
@@ -30,7 +30,8 @@ async def crypto_transfer_completed_handler(
command: CreateCryptoTransferCompletedCommand = Depends(get_crypto_transfer_completed_command), command: CreateCryptoTransferCompletedCommand = Depends(get_crypto_transfer_completed_command),
logger: ILogger = Depends(get_logger), logger: ILogger = Depends(get_logger),
) -> None: ) -> None:
trace_id=msg_body.trace_id headers=message.headers or {}
trace_id=msg_body.trace_id or message.correlation_id or str(headers.get('trace_id') or '')
token=trace_id_var.set(trace_id) token=trace_id_var.set(trace_id)
try: try:
payload=msg_body.model_dump(mode='json') payload=msg_body.model_dump(mode='json')

View File

@@ -103,6 +103,10 @@ async def itpay_webhook(
else: else:
payload = orjson.loads(raw) payload = orjson.loads(raw)
data = payload.get('data') if isinstance(payload.get('data'), dict) else {} data = payload.get('data') if isinstance(payload.get('data'), dict) else {}
metadata = data.get('metadata') if isinstance(data.get('metadata'), dict) else {}
trace_id = str(metadata.get('trace_id') or '').strip()
if trace_id:
logger.set_trace_id(trace_id)
status = str(data.get('status') or '').strip().lower() status = str(data.get('status') or '').strip().lower()
log_payload = { log_payload = {
'event': 'itpay_webhook_received', 'event': 'itpay_webhook_received',
@@ -111,7 +115,7 @@ async def itpay_webhook(
'payment_id': data.get('id'), 'payment_id': data.get('id'),
'client_payment_id': data.get('client_payment_id'), 'client_payment_id': data.get('client_payment_id'),
'payment_status': status, 'payment_status': status,
'itpay_metadata': data.get('metadata'), 'itpay_metadata': metadata,
} }
logger.info(log_payload) logger.info(log_payload)
if status == 'completed': if status == 'completed':