From ea0ca899acdfa597f2c9558d1dc69c7c70d7ec3e Mon Sep 17 00:00:00 2001 From: Noloquideus Date: Sat, 9 May 2026 10:57:02 +0300 Subject: [PATCH] fix: update recept --- .../create_payment_cloudkassir_command.py | 18 +++++++++ src/application/contracts/i_logger.py | 14 +++---- src/application/contracts/i_receipt.py | 3 +- src/infrastructure/cloud_kassir/client.py | 13 ++++--- src/infrastructure/logger/logger.py | 39 ++++++++++--------- src/presentation/messaging/crypto_transfer.py | 5 +-- src/presentation/routing/order.py | 4 +- 7 files changed, 59 insertions(+), 37 deletions(-) diff --git a/src/application/commands/create_payment_cloudkassir_command.py b/src/application/commands/create_payment_cloudkassir_command.py index fa46376..7c6c95c 100644 --- a/src/application/commands/create_payment_cloudkassir_command.py +++ b/src/application/commands/create_payment_cloudkassir_command.py @@ -49,6 +49,21 @@ class CreatePaymentCloudkassirCommand: email = str(user.email or '').strip() if not email: raise ApplicationException(status_code=400, message='User email missing') + supplier_name = ' '.join( + part + for part in ( + str(user.last_name or '').strip(), + str(user.first_name or '').strip(), + str(user.middle_name or '').strip(), + ) + if part + ) + if not supplier_name: + raise ApplicationException(status_code=400, message='User full name missing') + supplier_inn = str(user.inn or '').strip() + if not supplier_inn: + raise ApplicationException(status_code=400, message='User inn missing') + phone = str(user.phone or '').strip() or None paid_total = _parse_money(payment.amount) if paid_total is None: @@ -100,6 +115,9 @@ class CreatePaymentCloudkassirCommand: total_amount=total_amount, principal_amount=principal_amount, service_fee=service_fee, + phone=phone, + supplier_name=supplier_name, + supplier_inn=supplier_inn, request_id=str(ULID()), ) receipt_model = receipt_response.get('Model') diff --git a/src/application/contracts/i_logger.py b/src/application/contracts/i_logger.py index 1ac5797..edc0d97 100644 --- a/src/application/contracts/i_logger.py +++ b/src/application/contracts/i_logger.py @@ -1,4 +1,4 @@ -from typing import Protocol, Optional, Callable +from typing import Any,Callable,Optional,Protocol from src.application.domain.enums.log_format import LogFormat from src.application.domain.enums.log_level import LogLevel @@ -43,26 +43,26 @@ class ILogger(Protocol): """Get current service instance id""" ... - def debug(self, message: str) -> None: + def debug(self, message: Any) -> None: """Log debug message""" ... - def info(self, message: str) -> None: + def info(self, message: Any) -> None: """Log info message""" ... - def warning(self, message: str) -> None: + def warning(self, message: Any) -> None: """Log warning message""" ... - def error(self, message: str) -> None: + def error(self, message: Any) -> None: """Log error message""" ... - def critical(self, message: str) -> None: + def critical(self, message: Any) -> None: """Log critical message""" ... - def exception(self, message: str) -> None: + def exception(self, message: Any) -> None: """Log exception with traceback""" ... \ No newline at end of file diff --git a/src/application/contracts/i_receipt.py b/src/application/contracts/i_receipt.py index c6ece64..c40e204 100644 --- a/src/application/contracts/i_receipt.py +++ b/src/application/contracts/i_receipt.py @@ -15,7 +15,8 @@ class IReceipt(ABC): principal_amount: Decimal, service_fee: Decimal, phone: str | None = None, - customer_inn: str = '', + supplier_name: str = '', + supplier_inn: str = '', success_url: str | None = None, fail_url: str | None = None, request_id: str | None = None, diff --git a/src/infrastructure/cloud_kassir/client.py b/src/infrastructure/cloud_kassir/client.py index 78d24aa..5b29aa2 100644 --- a/src/infrastructure/cloud_kassir/client.py +++ b/src/infrastructure/cloud_kassir/client.py @@ -41,7 +41,8 @@ class ClaudeKassirClient(IReceipt): principal_amount: Decimal, service_fee: Decimal, phone: str | None = None, - customer_inn: str = '', + supplier_name: str = '', + supplier_inn: str = '', success_url: str | None = None, fail_url: str | None = None, request_id: str | None = None, @@ -68,15 +69,15 @@ class ClaudeKassirClient(IReceipt): 'amount': float(principal), 'vat': 0, 'method': 4, - 'object': 1, + 'object': 4, 'measurement_unit': 'шт', 'agent_info': { 'type': 6, }, 'supplier_info': { - 'name': 'Принципал', - 'phones': [], - 'inn': self._inn, + 'phones': [phone] if phone else [], + 'name': supplier_name, + 'inn': supplier_inn, }, }, { @@ -99,7 +100,7 @@ class ClaudeKassirClient(IReceipt): 'email': email, 'phone': phone, }, - 'Email': 'company@elcsa.ru', + 'Email': email, 'SuccessUrl': success_url or self._success_url, 'FailUrl': fail_url or self._fail_url, } diff --git a/src/infrastructure/logger/logger.py b/src/infrastructure/logger/logger.py index 6891fdc..5a7dd34 100644 --- a/src/infrastructure/logger/logger.py +++ b/src/infrastructure/logger/logger.py @@ -59,7 +59,7 @@ class Logger(ILogger): def clear_trace_id(self) -> None: trace_id_var.set("N/A") - def _prepare_log_data(self, level: LogLevel, message: str) -> dict[str, Any]: + def _prepare_log_data(self, level: LogLevel, message: Any) -> dict[str, Any]: current_frame = inspect.currentframe() if ( current_frame @@ -75,21 +75,24 @@ class Logger(ILogger): line_number = 0 log_data = { - "timestamp": datetime.now().isoformat(), - "level": level.name, - "instance_id": self.instance_id, - "file": filename, - "line": line_number, - "trace_id": trace_id_var.get(), - "message": message, + 'timestamp': datetime.now().isoformat(), + 'level': level.name, + 'instance_id': self.instance_id, + 'file': filename, + 'line': line_number, + 'trace_id': trace_id_var.get(), } + if isinstance(message, dict): + log_data.update(message) + else: + log_data['message'] = message if level == LogLevel.EXCEPTION: - log_data["exception"] = traceback.format_exc() + log_data['exception'] = traceback.format_exc() return log_data - def _log(self, level: LogLevel, message: str) -> None: + def _log(self, level: LogLevel, message: Any) -> None: if level >= self.min_level: log_data = self._prepare_log_data(level, message) @@ -100,9 +103,9 @@ class Logger(ILogger): f"{log_data['timestamp']} - {log_data['level']} - " f"{log_data['instance_id']} - {log_data['trace_id']} - " f"{log_data['file']}:{log_data['line']} - " - f"{log_data['message']}" + f"{log_data.get('message', log_data.get('event', ''))}" ) - if "exception" in log_data: + if 'exception' in log_data: log_message += f"\nTraceback:\n{log_data['exception']}" self._write(log_message) @@ -110,20 +113,20 @@ class Logger(ILogger): def _write(self, message: str) -> None: sys.stdout.write(message + "\n") - def debug(self, message: str) -> None: + def debug(self, message: Any) -> None: self._log(LogLevel.DEBUG, message) - def info(self, message: str) -> None: + def info(self, message: Any) -> None: self._log(LogLevel.INFO, message) - def warning(self, message: str) -> None: + def warning(self, message: Any) -> None: self._log(LogLevel.WARNING, message) - def error(self, message: str) -> None: + def error(self, message: Any) -> None: self._log(LogLevel.ERROR, message) - def critical(self, message: str) -> None: + def critical(self, message: Any) -> None: self._log(LogLevel.CRITICAL, message) - def exception(self, message: str) -> None: + def exception(self, message: Any) -> None: self._log(LogLevel.EXCEPTION, message) \ No newline at end of file diff --git a/src/presentation/messaging/crypto_transfer.py b/src/presentation/messaging/crypto_transfer.py index e55093b..dc86ef8 100644 --- a/src/presentation/messaging/crypto_transfer.py +++ b/src/presentation/messaging/crypto_transfer.py @@ -1,5 +1,4 @@ from fastapi import Depends -import orjson from faststream.rabbit.fastapi import RabbitMessage,RabbitRouter from pydantic import BaseModel from src.application.contracts import ILogger @@ -28,12 +27,12 @@ async def crypto_transfer_completed_handler( token=trace_id_var.set(trace_id) try: payload=msg_body.model_dump(mode='json') - logger.info(orjson.dumps({ + logger.info({ 'event':'crypto_transfer_completed_received', 'payload':payload, 'rabbit_message_id':message.message_id, 'rabbit_correlation_id':message.correlation_id, - },default=str).decode()) + }) finally: trace_id_var.reset(token) diff --git a/src/presentation/routing/order.py b/src/presentation/routing/order.py index 9ead8c1..c30320b 100644 --- a/src/presentation/routing/order.py +++ b/src/presentation/routing/order.py @@ -66,7 +66,7 @@ async def create_order( 'itpay_id': o.itpay_id, 'order_status': o.status.value if o.status is not None else None, } - logger.info(orjson.dumps(log_ids, default=str).decode()) + logger.info(log_ids) return ORJSONResponse(content=content, status_code=http_code) @@ -97,7 +97,7 @@ async def itpay_webhook( 'payment_status': status, 'itpay_metadata': data.get('metadata'), } - logger.info(orjson.dumps(log_payload, default=str).decode()) + logger.info(log_payload) if status == 'completed': payment = ItpayPaymentData.model_validate(data) await payment_command(payment)