multiple media upload and smartphone preview

This commit is contained in:
2026-02-11 23:21:43 +01:00
parent 64bf300677
commit 4bbaad0b4e
10 changed files with 1842 additions and 364 deletions

View File

@@ -1,5 +1,5 @@
"""Pydantic models for database entities."""
from datetime import datetime, date
from datetime import datetime, date, timezone
from enum import Enum
from typing import Optional, Dict, Any, List
from uuid import UUID
@@ -312,6 +312,16 @@ class ApiUsageLog(DBModel):
created_at: Optional[datetime] = None
class MediaItem(BaseModel):
"""Single media item (image or video) for a post."""
type: str # "image" | "video"
url: str
order: int
content_type: str # MIME type (e.g., 'image/jpeg', 'video/mp4')
uploaded_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
metadata: Optional[Dict[str, Any]] = None
class GeneratedPost(DBModel):
"""Generated post model."""
id: Optional[UUID] = None
@@ -327,7 +337,9 @@ class GeneratedPost(DBModel):
approved_at: Optional[datetime] = None
published_at: Optional[datetime] = None
post_type_id: Optional[UUID] = None
# Image
# Media (multi-media support)
media_items: List[MediaItem] = Field(default_factory=list)
# DEPRECATED: Image (kept for backward compatibility)
image_url: Optional[str] = None
# Scheduling fields
scheduled_at: Optional[datetime] = None
@@ -335,6 +347,11 @@ class GeneratedPost(DBModel):
# Metadata for additional info (e.g., LinkedIn post URL, auto-posting status)
metadata: Optional[Dict[str, Any]] = None
@property
def has_media(self) -> bool:
"""Check if post has any media items."""
return len(self.media_items) > 0
# ==================== LICENSE KEY MODELS ====================