Files
orion/app/modules/payments/schemas/__init__.py
Samir Boulahtit 1ef50893a1 refactor: migrate schemas to canonical module locations
Migrate remaining legacy schemas to their respective modules:

Marketplace module (app/modules/marketplace/schemas/):
- letzshop.py: Letzshop credentials, orders, fulfillment, sync
- onboarding.py: Vendor onboarding wizard schemas

Catalog module (app/modules/catalog/schemas/):
- product.py: ProductCreate, ProductUpdate, ProductResponse

Payments module (app/modules/payments/schemas/):
- payment.py: PaymentConfig, Stripe, transactions, balance

Delete legacy files:
- models/schema/letzshop.py
- models/schema/onboarding.py
- models/schema/product.py
- models/schema/payment.py
- models/schema/marketplace_product.py (re-export)
- models/schema/marketplace_import_job.py (re-export)
- models/schema/search.py (empty)

Update imports across 19 files to use canonical locations.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 15:16:49 +01:00

137 lines
3.1 KiB
Python

# app/modules/payments/schemas/__init__.py
"""
Payments module Pydantic schemas.
"""
from datetime import datetime
from typing import Any
from pydantic import BaseModel, Field
from app.modules.payments.schemas.payment import (
# Configuration
PaymentConfigResponse,
PaymentConfigUpdate,
PaymentConfigUpdateResponse,
# Stripe
StripeConnectRequest,
StripeConnectResponse,
StripeDisconnectResponse,
# Methods
PaymentMethodInfo,
PaymentMethodsResponse,
# Transactions
TransactionInfo,
TransactionsResponse,
# Balance
PaymentBalanceResponse,
# Refunds (config version)
PaymentRefundRequest,
PaymentRefundResponse,
)
class PaymentRequest(BaseModel):
"""Request to process a payment."""
amount: int = Field(..., gt=0, description="Amount in cents")
currency: str = Field(default="EUR", max_length=3)
payment_method_id: str | None = None
gateway: str = Field(default="stripe")
description: str | None = None
metadata: dict[str, Any] = Field(default_factory=dict)
class PaymentResponse(BaseModel):
"""Response from a payment operation."""
success: bool
transaction_id: str | None = None
gateway: str | None = None
status: str
amount: int
currency: str
error_message: str | None = None
created_at: datetime | None = None
class RefundRequest(BaseModel):
"""Request to issue a refund."""
transaction_id: str
amount: int | None = Field(None, gt=0, description="Amount in cents, None for full refund")
reason: str | None = None
class RefundResponse(BaseModel):
"""Response from a refund operation."""
success: bool
refund_id: str | None = None
transaction_id: str
amount: int
status: str
error_message: str | None = None
class PaymentMethodCreate(BaseModel):
"""Request to create a payment method."""
gateway: str = "stripe"
token: str # Gateway-specific token
is_default: bool = False
class PaymentMethodResponse(BaseModel):
"""Response for a payment method."""
id: str
gateway: str
type: str # card, bank_account, etc.
last4: str | None = None
is_default: bool
created_at: datetime
class GatewayResponse(BaseModel):
"""Response for gateway info."""
code: str
name: str
status: str
enabled: bool
supports_refunds: bool
supports_recurring: bool
supported_currencies: list[str]
__all__ = [
# Core payment schemas
"PaymentRequest",
"PaymentResponse",
"RefundRequest",
"RefundResponse",
"PaymentMethodCreate",
"PaymentMethodResponse",
"GatewayResponse",
# Configuration schemas
"PaymentConfigResponse",
"PaymentConfigUpdate",
"PaymentConfigUpdateResponse",
# Stripe integration
"StripeConnectRequest",
"StripeConnectResponse",
"StripeDisconnectResponse",
# Payment methods info
"PaymentMethodInfo",
"PaymentMethodsResponse",
# Transactions
"TransactionInfo",
"TransactionsResponse",
# Balance
"PaymentBalanceResponse",
# Refunds (config version)
"PaymentRefundRequest",
"PaymentRefundResponse",
]