# News Aggregation Service A FastAPI application that aggregates news from various sources using the Mediastack API. ## Features - User authentication and authorization - News article fetching and storage from Mediastack API - Filtering news by keywords, sources, categories, countries, and languages - User preferences for personalized news - Save articles for later reading - Background tasks for periodic news updates ## Tech Stack - **FastAPI**: High-performance web framework - **SQLite**: Database for storing news articles and user data - **SQLAlchemy**: ORM for database interactions - **Alembic**: Database migration tool - **Pydantic**: Data validation and settings management - **JWT**: Token-based authentication ## Requirements - Python 3.8+ - Mediastack API key ## Setup 1. Clone the repository 2. Install dependencies: ```bash pip install -r requirements.txt ``` 3. Set up environment variables: ``` MEDIASTACK_API_KEY=your_api_key_here SECRET_KEY=your_secret_key_here ``` 4. Run database migrations: ```bash alembic upgrade head ``` 5. Start the server: ```bash uvicorn main:app --reload ``` ## API Endpoints The API is documented with Swagger UI, available at `/docs` when the server is running. ### Main Endpoints - `/api/v1/users/register`: Register a new user - `/api/v1/users/token`: Login and get JWT token - `/api/v1/news`: Get news articles with optional filtering - `/api/v1/news/personalized`: Get personalized news based on user preferences - `/api/v1/news/saved`: Save articles for later reading - `/health`: Health check endpoint ## Project Structure - `app/api`: API routes and endpoints - `app/core`: Core functionality (config, security, utils) - `app/db`: Database connection and session - `app/models`: SQLAlchemy models - `app/schemas`: Pydantic schemas for validation - `app/services`: Business logic services - `migrations`: Database migrations ## Development To run linting checks: ```bash ruff check . ``` To fix linting issues automatically: ```bash ruff check --fix . ```