Automated Action 90c1cdef34 Setup News Aggregation Service
- Fix code linting issues
- Update README with detailed documentation
- Configure database paths for the current environment
- Create necessary directory structure

The News Aggregation Service is now ready to use with FastAPI and SQLite.
2025-05-27 18:50:11 +00:00

128 lines
2.4 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
class Config:
from_attributes = True
class NewsCategoryBase(BaseModel):
name: str
class NewsCategoryCreate(NewsCategoryBase):
pass
class NewsCategory(NewsCategoryBase):
id: int
created_at: datetime
updated_at: datetime
class 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
class 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
class 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
class Config:
from_attributes = True
# For API responses
class NewsResponse(BaseModel):
items: List[NewsArticle]
total: int