"""Payment-related Pydantic schemas.""" from __future__ import annotations from datetime import datetime from typing import Any, Dict, Optional from pydantic import BaseModel class PaymentInitiate(BaseModel): type: str # 'subscription' | 'purchase' plan: Optional[str] = None # 'monthly' | 'yearly' (subscription only) listing_id: Optional[str] = None # purchase only class PaymentResponse(BaseModel): id: str transaction_id: str type: str payer_id: Optional[str] = None amount: float currency: str status: str payment_method: Optional[str] = None operator_id: Optional[str] = None metadata: Optional[Dict[str, Any]] = None created_at: datetime paid_at: Optional[datetime] = None class PaymentInitiateResponse(BaseModel): payment_url: str transaction_id: str class PaymentReceiptResponse(BaseModel): id: str transaction_id: str type: str amount: float currency: str status: str payment_method: Optional[str] = None operator_id: Optional[str] = None metadata: Optional[Dict[str, Any]] = None created_at: datetime paid_at: Optional[datetime] = None # Enriched fields payer_name: Optional[str] = None payer_email: Optional[str] = None plan_label: Optional[str] = None listing_title: Optional[str] = None class SubscriptionResponse(BaseModel): id: str agency_id: str plan: str status: str starts_at: datetime ends_at: datetime payment_id: Optional[str] = None created_at: datetime