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