58 lines
1.5 KiB
Python
58 lines
1.5 KiB
Python
import json
|
|
from datetime import datetime
|
|
from typing import Any
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
from app.models.payment import PaymentMethod, PaymentStatus
|
|
|
|
|
|
class PaymentBase(BaseModel):
|
|
order_id: str
|
|
amount: float = Field(..., gt=0)
|
|
payment_method: PaymentMethod
|
|
|
|
class PaymentCreate(PaymentBase):
|
|
payment_details: dict[str, Any] = {}
|
|
|
|
class PaymentUpdate(BaseModel):
|
|
status: PaymentStatus | None = None
|
|
transaction_id: str | None = None
|
|
payment_details: dict[str, Any] | None = None
|
|
error_message: str | None = None
|
|
|
|
class PaymentInDBBase(PaymentBase):
|
|
id: str
|
|
status: PaymentStatus
|
|
transaction_id: str | None = None
|
|
error_message: str | None = None
|
|
created_at: datetime
|
|
updated_at: datetime | None = None
|
|
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
@property
|
|
def payment_details_parsed(self) -> dict[str, Any]:
|
|
if hasattr(self, 'payment_details') and self.payment_details:
|
|
if isinstance(self.payment_details, str):
|
|
try:
|
|
return json.loads(self.payment_details)
|
|
except:
|
|
return {}
|
|
return self.payment_details
|
|
return {}
|
|
|
|
class Payment(PaymentInDBBase):
|
|
payment_details: dict[str, Any] | None = None
|
|
|
|
class PaymentResponse(BaseModel):
|
|
"""Response model for payment processing endpoints"""
|
|
|
|
success: bool
|
|
payment_id: str | None = None
|
|
status: PaymentStatus | None = None
|
|
transaction_id: str | None = None
|
|
redirect_url: str | None = None
|
|
error_message: str | None = None
|