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