123 lines
3.5 KiB
Python
123 lines
3.5 KiB
Python
## File: your_app/schemas.py
|
|
|
|
from pydantic import BaseModel
|
|
from typing import List, Optional
|
|
from datetime import datetime
|
|
from decimal import Decimal # Use Decimal for currency
|
|
|
|
# --- NEW SCHEMAS FOR CIM WORKFLOW ---
|
|
|
|
class CardCreate(BaseModel):
|
|
# This schema receives sensitive card info just once.
|
|
card_number: str
|
|
expiration_date: str # Format: "YYYY-MM"
|
|
cvv: str
|
|
|
|
class Card(BaseModel):
|
|
# This schema is for displaying saved card info. It is NOT sensitive.
|
|
id: int
|
|
customer_id: int
|
|
last_four: str
|
|
card_brand: Optional[str] = None
|
|
expiration_month: int
|
|
expiration_year: int
|
|
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
class TransactionCreateByCardID(BaseModel):
|
|
# This is the NEW way to create a charge, using an internal card_id.
|
|
card_id: int
|
|
charge_amount: Decimal # Use Decimal
|
|
|
|
# Fields for Level 2 data
|
|
tax_amount: Optional[Decimal] = Decimal("0.0")
|
|
|
|
# Your other business-related IDs
|
|
service_id: Optional[int] = None
|
|
delivery_id: Optional[int] = None
|
|
|
|
# --- YOUR EXISTING SCHEMAS (UPDATED) ---
|
|
|
|
class TransactionBase(BaseModel):
|
|
preauthorize_amount: Optional[Decimal] = None
|
|
charge_amount: Optional[Decimal] = None
|
|
transaction_type: int
|
|
service_id: Optional[int] = None
|
|
delivery_id: Optional[int] = None
|
|
card_id: Optional[int] = None
|
|
payment_gateway: int = 1
|
|
rejection_reason: Optional[str] = None
|
|
|
|
class TransactionCreate(TransactionBase):
|
|
charge_amount: Decimal
|
|
card_number: str
|
|
expiration_date: str # MM/YY
|
|
cvv: str
|
|
|
|
class TransactionAuthorize(TransactionBase):
|
|
preauthorize_amount: Decimal
|
|
card_number: str
|
|
expiration_date: str
|
|
cvv: str
|
|
|
|
class TransactionCapture(BaseModel):
|
|
charge_amount: Decimal
|
|
auth_net_transaction_id: str
|
|
|
|
class Transaction(TransactionBase):
|
|
id: int
|
|
transaction_type: int
|
|
status: int
|
|
auth_net_transaction_id: Optional[str] = None
|
|
customer_id: int
|
|
created_at: datetime
|
|
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
class CustomerBase(BaseModel):
|
|
account_number: Optional[str] = None
|
|
customer_last_name: Optional[str] = None
|
|
customer_first_name: Optional[str] = None
|
|
customer_town: Optional[str] = None
|
|
customer_state: Optional[int] = None
|
|
customer_zip: Optional[str] = None
|
|
customer_first_call: Optional[datetime] = None
|
|
customer_email: Optional[str] = None
|
|
customer_automatic: Optional[int] = None
|
|
customer_phone_number: Optional[str] = None
|
|
customer_home_type: Optional[int] = None
|
|
customer_apt: Optional[str] = None
|
|
customer_address: Optional[str] = None
|
|
company_id: Optional[int] = None
|
|
customer_latitude: Optional[str] = None
|
|
customer_longitude: Optional[str] = None
|
|
correct_address: Optional[bool] = None
|
|
|
|
class Customer(CustomerBase):
|
|
id: int
|
|
# --- ADD THIS FIELD ---
|
|
auth_net_profile_id: Optional[str] = None
|
|
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
|
|
# --- ADD THIS NEW SCHEMA ---
|
|
class TransactionAuthorizeByCardID(BaseModel):
|
|
# This is for creating an AUTHORIZATION using an internal card_id.
|
|
card_id: int
|
|
preauthorize_amount: Decimal # Use Decimal
|
|
|
|
# Fields for Level 2 data (important for rates!)
|
|
tax_amount: Optional[Decimal] = Decimal("0.0")
|
|
|
|
# Your other business-related IDs
|
|
service_id: Optional[int] = None
|
|
delivery_id: Optional[int] = None
|
|
|
|
# --- Your TransactionCapture schema is perfect and needs NO changes ---
|
|
class TransactionCapture(BaseModel):
|
|
charge_amount: Decimal
|
|
auth_net_transaction_id: str |