fix: update recept
This commit is contained in:
@@ -49,6 +49,21 @@ class CreatePaymentCloudkassirCommand:
|
|||||||
email = str(user.email or '').strip()
|
email = str(user.email or '').strip()
|
||||||
if not email:
|
if not email:
|
||||||
raise ApplicationException(status_code=400, message='User email missing')
|
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)
|
paid_total = _parse_money(payment.amount)
|
||||||
if paid_total is None:
|
if paid_total is None:
|
||||||
@@ -100,6 +115,9 @@ class CreatePaymentCloudkassirCommand:
|
|||||||
total_amount=total_amount,
|
total_amount=total_amount,
|
||||||
principal_amount=principal_amount,
|
principal_amount=principal_amount,
|
||||||
service_fee=service_fee,
|
service_fee=service_fee,
|
||||||
|
phone=phone,
|
||||||
|
supplier_name=supplier_name,
|
||||||
|
supplier_inn=supplier_inn,
|
||||||
request_id=str(ULID()),
|
request_id=str(ULID()),
|
||||||
)
|
)
|
||||||
receipt_model = receipt_response.get('Model')
|
receipt_model = receipt_response.get('Model')
|
||||||
|
|||||||
@@ -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_format import LogFormat
|
||||||
from src.application.domain.enums.log_level import LogLevel
|
from src.application.domain.enums.log_level import LogLevel
|
||||||
|
|
||||||
@@ -43,26 +43,26 @@ class ILogger(Protocol):
|
|||||||
"""Get current service instance id"""
|
"""Get current service instance id"""
|
||||||
...
|
...
|
||||||
|
|
||||||
def debug(self, message: str) -> None:
|
def debug(self, message: Any) -> None:
|
||||||
"""Log debug message"""
|
"""Log debug message"""
|
||||||
...
|
...
|
||||||
|
|
||||||
def info(self, message: str) -> None:
|
def info(self, message: Any) -> None:
|
||||||
"""Log info message"""
|
"""Log info message"""
|
||||||
...
|
...
|
||||||
|
|
||||||
def warning(self, message: str) -> None:
|
def warning(self, message: Any) -> None:
|
||||||
"""Log warning message"""
|
"""Log warning message"""
|
||||||
...
|
...
|
||||||
|
|
||||||
def error(self, message: str) -> None:
|
def error(self, message: Any) -> None:
|
||||||
"""Log error message"""
|
"""Log error message"""
|
||||||
...
|
...
|
||||||
|
|
||||||
def critical(self, message: str) -> None:
|
def critical(self, message: Any) -> None:
|
||||||
"""Log critical message"""
|
"""Log critical message"""
|
||||||
...
|
...
|
||||||
|
|
||||||
def exception(self, message: str) -> None:
|
def exception(self, message: Any) -> None:
|
||||||
"""Log exception with traceback"""
|
"""Log exception with traceback"""
|
||||||
...
|
...
|
||||||
@@ -15,7 +15,8 @@ class IReceipt(ABC):
|
|||||||
principal_amount: Decimal,
|
principal_amount: Decimal,
|
||||||
service_fee: Decimal,
|
service_fee: Decimal,
|
||||||
phone: str | None = None,
|
phone: str | None = None,
|
||||||
customer_inn: str = '',
|
supplier_name: str = '',
|
||||||
|
supplier_inn: str = '',
|
||||||
success_url: str | None = None,
|
success_url: str | None = None,
|
||||||
fail_url: str | None = None,
|
fail_url: str | None = None,
|
||||||
request_id: str | None = None,
|
request_id: str | None = None,
|
||||||
|
|||||||
@@ -41,7 +41,8 @@ class ClaudeKassirClient(IReceipt):
|
|||||||
principal_amount: Decimal,
|
principal_amount: Decimal,
|
||||||
service_fee: Decimal,
|
service_fee: Decimal,
|
||||||
phone: str | None = None,
|
phone: str | None = None,
|
||||||
customer_inn: str = '',
|
supplier_name: str = '',
|
||||||
|
supplier_inn: str = '',
|
||||||
success_url: str | None = None,
|
success_url: str | None = None,
|
||||||
fail_url: str | None = None,
|
fail_url: str | None = None,
|
||||||
request_id: str | None = None,
|
request_id: str | None = None,
|
||||||
@@ -68,15 +69,15 @@ class ClaudeKassirClient(IReceipt):
|
|||||||
'amount': float(principal),
|
'amount': float(principal),
|
||||||
'vat': 0,
|
'vat': 0,
|
||||||
'method': 4,
|
'method': 4,
|
||||||
'object': 1,
|
'object': 4,
|
||||||
'measurement_unit': 'шт',
|
'measurement_unit': 'шт',
|
||||||
'agent_info': {
|
'agent_info': {
|
||||||
'type': 6,
|
'type': 6,
|
||||||
},
|
},
|
||||||
'supplier_info': {
|
'supplier_info': {
|
||||||
'name': 'Принципал',
|
'phones': [phone] if phone else [],
|
||||||
'phones': [],
|
'name': supplier_name,
|
||||||
'inn': self._inn,
|
'inn': supplier_inn,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -99,7 +100,7 @@ class ClaudeKassirClient(IReceipt):
|
|||||||
'email': email,
|
'email': email,
|
||||||
'phone': phone,
|
'phone': phone,
|
||||||
},
|
},
|
||||||
'Email': 'company@elcsa.ru',
|
'Email': email,
|
||||||
'SuccessUrl': success_url or self._success_url,
|
'SuccessUrl': success_url or self._success_url,
|
||||||
'FailUrl': fail_url or self._fail_url,
|
'FailUrl': fail_url or self._fail_url,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ class Logger(ILogger):
|
|||||||
def clear_trace_id(self) -> None:
|
def clear_trace_id(self) -> None:
|
||||||
trace_id_var.set("N/A")
|
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()
|
current_frame = inspect.currentframe()
|
||||||
if (
|
if (
|
||||||
current_frame
|
current_frame
|
||||||
@@ -75,21 +75,24 @@ class Logger(ILogger):
|
|||||||
line_number = 0
|
line_number = 0
|
||||||
|
|
||||||
log_data = {
|
log_data = {
|
||||||
"timestamp": datetime.now().isoformat(),
|
'timestamp': datetime.now().isoformat(),
|
||||||
"level": level.name,
|
'level': level.name,
|
||||||
"instance_id": self.instance_id,
|
'instance_id': self.instance_id,
|
||||||
"file": filename,
|
'file': filename,
|
||||||
"line": line_number,
|
'line': line_number,
|
||||||
"trace_id": trace_id_var.get(),
|
'trace_id': trace_id_var.get(),
|
||||||
"message": message,
|
|
||||||
}
|
}
|
||||||
|
if isinstance(message, dict):
|
||||||
|
log_data.update(message)
|
||||||
|
else:
|
||||||
|
log_data['message'] = message
|
||||||
|
|
||||||
if level == LogLevel.EXCEPTION:
|
if level == LogLevel.EXCEPTION:
|
||||||
log_data["exception"] = traceback.format_exc()
|
log_data['exception'] = traceback.format_exc()
|
||||||
|
|
||||||
return log_data
|
return log_data
|
||||||
|
|
||||||
def _log(self, level: LogLevel, message: str) -> None:
|
def _log(self, level: LogLevel, message: Any) -> None:
|
||||||
if level >= self.min_level:
|
if level >= self.min_level:
|
||||||
log_data = self._prepare_log_data(level, message)
|
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['timestamp']} - {log_data['level']} - "
|
||||||
f"{log_data['instance_id']} - {log_data['trace_id']} - "
|
f"{log_data['instance_id']} - {log_data['trace_id']} - "
|
||||||
f"{log_data['file']}:{log_data['line']} - "
|
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']}"
|
log_message += f"\nTraceback:\n{log_data['exception']}"
|
||||||
|
|
||||||
self._write(log_message)
|
self._write(log_message)
|
||||||
@@ -110,20 +113,20 @@ class Logger(ILogger):
|
|||||||
def _write(self, message: str) -> None:
|
def _write(self, message: str) -> None:
|
||||||
sys.stdout.write(message + "\n")
|
sys.stdout.write(message + "\n")
|
||||||
|
|
||||||
def debug(self, message: str) -> None:
|
def debug(self, message: Any) -> None:
|
||||||
self._log(LogLevel.DEBUG, message)
|
self._log(LogLevel.DEBUG, message)
|
||||||
|
|
||||||
def info(self, message: str) -> None:
|
def info(self, message: Any) -> None:
|
||||||
self._log(LogLevel.INFO, message)
|
self._log(LogLevel.INFO, message)
|
||||||
|
|
||||||
def warning(self, message: str) -> None:
|
def warning(self, message: Any) -> None:
|
||||||
self._log(LogLevel.WARNING, message)
|
self._log(LogLevel.WARNING, message)
|
||||||
|
|
||||||
def error(self, message: str) -> None:
|
def error(self, message: Any) -> None:
|
||||||
self._log(LogLevel.ERROR, message)
|
self._log(LogLevel.ERROR, message)
|
||||||
|
|
||||||
def critical(self, message: str) -> None:
|
def critical(self, message: Any) -> None:
|
||||||
self._log(LogLevel.CRITICAL, message)
|
self._log(LogLevel.CRITICAL, message)
|
||||||
|
|
||||||
def exception(self, message: str) -> None:
|
def exception(self, message: Any) -> None:
|
||||||
self._log(LogLevel.EXCEPTION, message)
|
self._log(LogLevel.EXCEPTION, message)
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
from fastapi import Depends
|
from fastapi import Depends
|
||||||
import orjson
|
|
||||||
from faststream.rabbit.fastapi import RabbitMessage,RabbitRouter
|
from faststream.rabbit.fastapi import RabbitMessage,RabbitRouter
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
from src.application.contracts import ILogger
|
from src.application.contracts import ILogger
|
||||||
@@ -28,12 +27,12 @@ async def crypto_transfer_completed_handler(
|
|||||||
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')
|
||||||
logger.info(orjson.dumps({
|
logger.info({
|
||||||
'event':'crypto_transfer_completed_received',
|
'event':'crypto_transfer_completed_received',
|
||||||
'payload':payload,
|
'payload':payload,
|
||||||
'rabbit_message_id':message.message_id,
|
'rabbit_message_id':message.message_id,
|
||||||
'rabbit_correlation_id':message.correlation_id,
|
'rabbit_correlation_id':message.correlation_id,
|
||||||
},default=str).decode())
|
})
|
||||||
finally:
|
finally:
|
||||||
trace_id_var.reset(token)
|
trace_id_var.reset(token)
|
||||||
|
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ async def create_order(
|
|||||||
'itpay_id': o.itpay_id,
|
'itpay_id': o.itpay_id,
|
||||||
'order_status': o.status.value if o.status is not None else None,
|
'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)
|
return ORJSONResponse(content=content, status_code=http_code)
|
||||||
|
|
||||||
|
|
||||||
@@ -97,7 +97,7 @@ async def itpay_webhook(
|
|||||||
'payment_status': status,
|
'payment_status': status,
|
||||||
'itpay_metadata': data.get('metadata'),
|
'itpay_metadata': data.get('metadata'),
|
||||||
}
|
}
|
||||||
logger.info(orjson.dumps(log_payload, default=str).decode())
|
logger.info(log_payload)
|
||||||
if status == 'completed':
|
if status == 'completed':
|
||||||
payment = ItpayPaymentData.model_validate(data)
|
payment = ItpayPaymentData.model_validate(data)
|
||||||
await payment_command(payment)
|
await payment_command(payment)
|
||||||
|
|||||||
Reference in New Issue
Block a user