fastapi-proxy-test / app /schemas.py
tanbushi's picture
Sun Jun 8 16:41:37 CST 2025
7183ec8
from typing import List, Optional, Dict, Any
from pydantic import BaseModel, Field # Import Field
from datetime import datetime # Import datetime
# Pydantic models for reading data from the database
class KeyCategoryBase(BaseModel):
name: str
type: str
tags: Optional[List[str]] = None
# metadata: Optional[Dict[str, Any]] = None # Removed from base
class KeyCategory(KeyCategoryBase):
id: int
# Map metadata_ from SQLAlchemy model to metadata in schema
metadata: Optional[Dict[str, Any]] = Field(None, alias="metadata_")
created_at: Optional[datetime] = None # Use datetime type
updated_at: Optional[datetime] = None # Use datetime type
class Config:
orm_mode = True # Enable ORM mode
by_alias = True # Use aliases for serialization
# Configure JSON encoding for datetime objects if needed (orm_mode might handle this)
# json_encoders = {
# datetime: lambda v: v.isoformat() if v else None
# }
class APIKeyBase(BaseModel):
value: str
category_id: int
status: str = "active"
# metadata: Optional[Dict[str, Any]] = None # Removed from base
class APIKey(APIKeyBase):
id: int
usage_count: int
last_used: Optional[datetime] = None # Use datetime type
# Map metadata_ from SQLAlchemy model to metadata in schema
metadata: Optional[Dict[str, Any]] = Field(None, alias="metadata_")
created_at: Optional[datetime] = None # Use datetime type
updated_at: Optional[datetime] = None # Use datetime type
class Config:
orm_mode = True # Enable ORM mode
by_alias = True # Use aliases for serialization
# Configure JSON encoding for datetime objects if needed
# json_encoders = {
# datetime: lambda v: v.isoformat() if v else None
# }
# Pydantic models for creating data (less fields, e.g., no ID, timestamps)
class KeyCategoryCreate(KeyCategoryBase):
metadata: Optional[Dict[str, Any]] = None # Add metadata back to create schema
class APIKeyCreate(APIKeyBase):
metadata: Optional[Dict[str, Any]] = None # Add metadata back to create schema
# Pydantic models for updating data (all fields optional)
class KeyCategoryUpdate(BaseModel):
name: Optional[str] = None
type: Optional[str] = None
tags: Optional[List[str]] = None
metadata: Optional[Dict[str, Any]] = None
class APIKeyUpdate(BaseModel):
value: Optional[str] = None
category_id: Optional[int] = None
status: Optional[str] = None
metadata: Optional[Dict[str, Any]] = None