# Anime Information API This is a FastAPI application that provides anime information via a RESTful API. ## Features - **Comprehensive Anime Information**: Extensive anime data including titles, synopsis, episodes, scores, studios, seasons, rating details, etc. - **Genre Management**: Create, read, update, and delete anime genres - **Character Management**: Create, read, update, and delete anime characters with detailed profiles - **Advanced Search**: Search anime with multiple filters including year, score range, source, studio, etc. - **Character-Based Anime Search**: Find anime based on character attributes like name, role, or gender - **Smart Pagination**: Built-in pagination with rich metadata for easy navigation - **Statistics Dashboard**: Get detailed statistical insights about the anime collection - **Health Endpoint**: Check the health of the application and its database connection ## Tech Stack - **Framework**: FastAPI - **Database**: SQLite with SQLAlchemy ORM - **Migration Tool**: Alembic - **Validation**: Pydantic - **Code Quality**: Ruff linter ## Project Structure ``` anime-information-api/ ├── alembic/ # Database migrations ├── app/ # Application code │ ├── api/ # API endpoints │ │ └── endpoints/ # Route definitions │ ├── core/ # Core application components │ ├── crud/ # CRUD operations │ ├── db/ # Database setup │ ├── initial_data/ # Data seeding │ ├── models/ # SQLAlchemy models │ └── schemas/ # Pydantic schemas ├── storage/ # Storage for SQLite database ├── alembic.ini # Alembic config ├── main.py # Application entry point ├── requirements.txt # Dependencies └── seed_data.py # Script to seed initial data ``` ## Getting Started ### Prerequisites - Python 3.9+ ### Installation 1. Clone the repository 2. Install dependencies: ``` pip install -r requirements.txt ``` ### Database Setup Run the Alembic migrations to set up the database schema: ``` alembic upgrade head ``` Seed the database with initial data: ``` python seed_data.py ``` ### Running the Application Start the application with: ``` uvicorn main:app --reload ``` The API will be available at http://localhost:8000, and the interactive API documentation at http://localhost:8000/docs. ## API Endpoints ### Health Check - `GET /health`: Check application health ### Anime - `GET /api/v1/anime/`: Get anime list with advanced filtering and pagination - `GET /api/v1/anime/statistics`: Get statistics about the anime collection - `GET /api/v1/anime/search-by-character`: Search anime by character attributes - `POST /api/v1/anime/`: Create new anime - `GET /api/v1/anime/{id}`: Get anime by ID - `PUT /api/v1/anime/{id}`: Update anime - `DELETE /api/v1/anime/{id}`: Delete anime ### Genres - `GET /api/v1/genres/`: Get genre list - `POST /api/v1/genres/`: Create new genre - `GET /api/v1/genres/{id}`: Get genre by ID - `PUT /api/v1/genres/{id}`: Update genre - `DELETE /api/v1/genres/{id}`: Delete genre ### Characters - `GET /api/v1/characters/`: Search characters with filters (name, anime_id, role) - `POST /api/v1/characters/`: Create new character - `GET /api/v1/characters/{id}`: Get character by ID - `PUT /api/v1/characters/{id}`: Update character - `DELETE /api/v1/characters/{id}`: Delete character - `GET /api/v1/characters/anime/{anime_id}`: Get all characters for a specific anime ## Advanced Search Parameters ### Anime Search Parameters The anime search endpoint supports the following parameters: - `title`: Filter by title (partial match) - `genre_id`: Filter by genre ID - `status`: Filter by anime status (airing, finished, upcoming) - `year_from`: Filter by starting year (inclusive) - `year_to`: Filter by ending year (inclusive) - `score_min`: Filter by minimum score (inclusive) - `score_max`: Filter by maximum score (inclusive) - `source`: Filter by source material (manga, light novel, etc.) - `studio`: Filter by studio name (partial match) - `sort_by`: Sort by field (id, title, score, popularity, etc.) - `sort_order`: Sort order (asc, desc) - `skip`: Number of items to skip for pagination - `limit`: Maximum number of items to return ### Search by Character Parameters The anime search-by-character endpoint supports the following parameters: - `character_name`: Filter anime by character name (partial match) - `character_role`: Filter anime by character role (e.g., "Main", "Supporting") - `character_gender`: Filter anime by character gender - `include_anime_filters`: Boolean flag to include anime filters below in the search - Plus all the standard anime filters listed above (when include_anime_filters is set to true) ### Character Search Parameters The character search endpoint supports the following parameters: - `name`: Filter by character name (partial match) - `anime_id`: Filter by anime ID - `role`: Filter by character role (Main, Supporting, Antagonist, etc.) - `skip`: Number of items to skip for pagination - `limit`: Maximum number of items to return ## Anime Model The anime model includes the following fields: ### Basic Information - `title`: Main title of the anime - `alternative_titles`: Other titles the anime is known by - `synopsis`: Plot summary - `episodes`: Number of episodes - `status`: Airing status (airing, finished, upcoming) - `aired_from`: Start date - `aired_to`: End date - `duration`: Episode duration - `image_url`: URL to anime cover image ### Rating Information - `rating`: Content rating (PG-13, R, etc.) - `score`: Average user score (0-10) - `score_count`: Number of users who rated - `ranked`: Ranking position - `popularity`: Popularity ranking - `favorites_count`: Number of users who favorited ### Production Information - `studio`: Animation studio - `source`: Original source material - `producers`: Production companies - `licensors`: Companies with distribution licenses ### Season Information - `season`: Broadcast season (Winter, Spring, Summer, Fall) - `season_year`: Year of the season - `broadcast_day`: Day of the week it airs - `broadcast_time`: Time of day it airs - `is_airing`: Whether it's currently airing ### Content Information - `themes`: Major themes (School, Military, etc.) - `demographics`: Target audience (Shounen, Seinen, etc.) - `related_anime`: Related anime works (sequels, prequels, etc.) ## Statistics The statistics endpoint provides the following information: - Total anime count - Average score and episode count - Distribution by status, source, and studio - Yearly distribution of releases - Score distribution (0-1, 1-2, ... 9-10) - Top genres with counts