Documentation: - Add comprehensive capacity planning guide (docs/architecture/capacity-planning.md) - Add operations docs: platform-health, capacity-monitoring, image-storage - Link pricing strategy to capacity planning documentation - Update mkdocs.yml with new Operations section Image Upload System: - Add ImageService with WebP conversion and sharded directory structure - Generate multiple size variants (original, 800px, 200px) - Add storage stats endpoint for monitoring - Add Pillow dependency for image processing Platform Health Monitoring: - Add /admin/platform-health page with real-time metrics - Show CPU, memory, disk usage with progress bars - Display capacity thresholds with status indicators - Generate scaling recommendations automatically - Determine infrastructure tier based on usage - Add psutil dependency for system metrics Admin UI: - Add Capacity Monitor to Platform Health section in sidebar - Create platform-health.html template with stats cards - Create platform-health.js for Alpine.js state management 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
47 lines
920 B
Python
47 lines
920 B
Python
# models/schema/image.py
|
|
"""
|
|
Pydantic schemas for image operations.
|
|
"""
|
|
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class ImageUrls(BaseModel):
|
|
"""URLs for image variants."""
|
|
|
|
original: str
|
|
medium: str | None = None # 800px variant
|
|
thumb: str | None = None # 200px variant
|
|
|
|
# Allow arbitrary keys for flexibility
|
|
class Config:
|
|
extra = "allow"
|
|
|
|
|
|
class ImageUploadResponse(BaseModel):
|
|
"""Response from image upload."""
|
|
|
|
success: bool
|
|
image: dict | None = None
|
|
error: str | None = None
|
|
|
|
|
|
class ImageDeleteResponse(BaseModel):
|
|
"""Response from image deletion."""
|
|
|
|
success: bool
|
|
message: str
|
|
|
|
|
|
class ImageStorageStats(BaseModel):
|
|
"""Image storage statistics."""
|
|
|
|
total_files: int
|
|
total_size_bytes: int
|
|
total_size_mb: float
|
|
total_size_gb: float
|
|
directory_count: int
|
|
max_files_per_dir: int
|
|
avg_files_per_dir: float
|
|
products_estimated: int
|