PostGen / backend /app /schemas.py
Seth
updated
4b3843b
from pydantic import BaseModel, EmailStr
from datetime import datetime
from typing import Optional, List, Dict, Any
class IntegrationCreate(BaseModel):
provider: str
access_token: str
refresh_token: Optional[str] = None
expires_at: Optional[datetime] = None
account_info: Optional[Dict[str, Any]] = None
class IntegrationResponse(BaseModel):
id: int
provider: str
connected: bool
account_info: Optional[Dict[str, Any]] = None
created_at: datetime
class Config:
from_attributes = True
class AssetCreate(BaseModel):
name: str
file_type: str
product_category: str
sub_category: Optional[str] = None
size: int
metadata: Optional[Dict[str, Any]] = None
class AssetResponse(BaseModel):
id: str # Changed to str to preserve precision for large CockroachDB IDs (bigint)
name: str
file_type: str
product_category: str
sub_category: Optional[str] = None
size: int
extracted_content: Optional[Dict[str, Any]] = None
analysis_status: Optional[str] = None
analyzed_at: Optional[datetime] = None
created_at: datetime
class Config:
from_attributes = True
class PostCreate(BaseModel):
title: str
content: str
post_type: str
product_category: str
scheduled_date: datetime
assets: Optional[List[int]] = None
class PostResponse(BaseModel):
id: int
title: str
content: str
post_type: str
product_category: str
scheduled_date: datetime
status: str
created_at: datetime
class Config:
from_attributes = True
class CampaignCreate(BaseModel):
name: str
date_range_start: datetime
date_range_end: datetime
products: List[str]
post_types: List[str]
posts_per_week: int
class CampaignResponse(BaseModel):
id: int
name: str
date_range_start: datetime
date_range_end: datetime
products: List[str]
post_types: List[str]
posts_per_week: int
status: str
created_at: datetime
class Config:
from_attributes = True
class CanvaBrandTemplate(BaseModel):
id: str
title: str
view_url: str
create_url: str
thumbnail: Optional[Dict[str, Any]] = None
class CanvaAutofillRequest(BaseModel):
brand_template_id: str
title: str
data: Dict[str, Any]
class CanvaAutofillResponse(BaseModel):
job_id: str
status: str
class LinkedInPostRequest(BaseModel):
text: str
media_uris: Optional[List[str]] = None
scheduled_time: Optional[datetime] = None
class AIContentRequest(BaseModel):
product_category: str
post_type: str
context: Optional[str] = None
assets: Optional[List[int]] = None
class AIContentResponse(BaseModel):
content: str
suggested_hashtags: List[str]