from typing import List, Optional from datetime import datetime from pydantic import BaseModel class NewsSourceBase(BaseModel): name: str source_id: str url: Optional[str] = None class NewsSourceCreate(NewsSourceBase): pass class NewsSource(NewsSourceBase): id: int created_at: datetime updated_at: datetime model_config = { "from_attributes": True } class NewsCategoryBase(BaseModel): name: str class NewsCategoryCreate(NewsCategoryBase): pass class NewsCategory(NewsCategoryBase): id: int created_at: datetime updated_at: datetime model_config = { "from_attributes": True } class NewsArticleBase(BaseModel): title: str description: Optional[str] = None content: Optional[str] = None url: str image_url: Optional[str] = None published_at: datetime author: Optional[str] = None language: Optional[str] = None country: Optional[str] = None source_id: Optional[int] = None category_id: Optional[int] = None class NewsArticleCreate(NewsArticleBase): pass class NewsArticleUpdate(BaseModel): title: Optional[str] = None description: Optional[str] = None content: Optional[str] = None image_url: Optional[str] = None category_id: Optional[int] = None class NewsArticle(NewsArticleBase): id: int created_at: datetime updated_at: datetime source: Optional[NewsSource] = None category: Optional[NewsCategory] = None model_config = { "from_attributes": True } class SavedArticleBase(BaseModel): article_id: int notes: Optional[str] = None class SavedArticleCreate(SavedArticleBase): pass class SavedArticle(SavedArticleBase): id: int user_id: int created_at: datetime updated_at: datetime article: Optional[NewsArticle] = None model_config = { "from_attributes": True } class UserPreferenceBase(BaseModel): keywords: Optional[str] = None sources: Optional[str] = None categories: Optional[str] = None countries: Optional[str] = None languages: Optional[str] = None class UserPreferenceCreate(UserPreferenceBase): pass class UserPreferenceUpdate(UserPreferenceBase): pass class UserPreference(UserPreferenceBase): id: int user_id: int created_at: datetime updated_at: datetime model_config = { "from_attributes": True } # For API responses class NewsResponse(BaseModel): items: List[NewsArticle] total: int