feat: update logger logic
This commit is contained in:
@@ -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):
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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},
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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)
|
||||||
@@ -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')
|
||||||
|
|||||||
@@ -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':
|
||||||
|
|||||||
Reference in New Issue
Block a user