fix: update recept

This commit is contained in:
2026-05-09 10:57:02 +03:00
parent 195c0a8e53
commit ea0ca899ac
7 changed files with 59 additions and 37 deletions

View File

@@ -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')

View File

@@ -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"""
...

View File

@@ -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,

View File

@@ -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,
}

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)