
- 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.
128 lines
2.4 KiB
Python
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 |