Automated Action 2ea89c98f5 Fix dependency conflicts and update to FastAPI 0.100.x
- Update FastAPI from 0.96.x to 0.100.x to support Pydantic 2.x
- Update uvicorn from 0.22.x to 0.23.x for compatibility
- Update Pydantic model configurations to use model_config instead of Config class
- Keep Pydantic 2.x version as required by the project
2025-05-27 19:01:24 +00:00

133 lines
2.5 KiB
Python

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