feat: add full pay path
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
from decimal import Decimal
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from src.application.abstractions.repositories.i_payment_repository import IPaymentRepository
|
||||
from src.application.contracts import ILogger
|
||||
from src.application.domain.enums import PaymentStatus
|
||||
from src.infrastructure.database.models.payment import Payment
|
||||
|
||||
|
||||
class PaymentRepository(IPaymentRepository):
|
||||
def __init__(self,session: AsyncSession,logger: ILogger):
|
||||
self._session=session
|
||||
self._logger=logger
|
||||
|
||||
|
||||
async def create_completed(self,*,user_id:str,order_id:str,itpay_payment_id:str,itpay_paid_amount:str|None,transaction_id:str|None,paid_at:str|None,expired_date:str|None) -> Payment:
|
||||
stmt=select(Payment).where(Payment.order_id==order_id)
|
||||
existing=await self._session.scalar(stmt)
|
||||
if existing is not None:
|
||||
return existing
|
||||
paid_at_dt=datetime.fromisoformat(paid_at.replace('Z','+00:00')) if paid_at else None
|
||||
expired_dt=datetime.fromisoformat(expired_date.replace('Z','+00:00')) if expired_date else None
|
||||
paid_amount_dec=Decimal(str(itpay_paid_amount)) if itpay_paid_amount is not None else None
|
||||
model=Payment(
|
||||
user_id=user_id,
|
||||
order_id=order_id,
|
||||
status=PaymentStatus.PENDING,
|
||||
receipt_cloudekassir_link=None,
|
||||
itpay_payment_id=itpay_payment_id,
|
||||
itpay_paid_amount=paid_amount_dec,
|
||||
transaction_id=transaction_id,
|
||||
paid_at=paid_at_dt,
|
||||
expired_date=expired_dt,
|
||||
)
|
||||
self._session.add(model)
|
||||
await self._session.flush()
|
||||
return model
|
||||
|
||||
Reference in New Issue
Block a user