Automated Action 0186fc8e70 Create movie database backend with FastAPI and SQLite
This commit implements a simple movie database backend inspired by IMDb. It includes:
- API endpoints for movies, actors, directors and genres
- SQLAlchemy models with relationships
- Alembic migrations
- Pydantic schemas for request/response validation
- Search and filtering functionality
- Health check endpoint
- Complete documentation
2025-05-19 20:28:07 +00:00

77 lines
1.8 KiB
Python

from datetime import date
from typing import List, Optional, TYPE_CHECKING
from pydantic import BaseModel, Field
# Shared properties
class MovieBase(BaseModel):
title: str
release_date: Optional[date] = None
overview: Optional[str] = None
poster_path: Optional[str] = None
runtime: Optional[int] = None
rating: Optional[float] = Field(None, ge=0, le=10)
# Properties to receive on movie creation
class MovieCreate(MovieBase):
director_id: Optional[int] = None
genre_ids: List[int] = []
actor_ids: List[int] = []
# Properties to receive on movie update
class MovieUpdate(MovieBase):
title: Optional[str] = None
director_id: Optional[int] = None
genre_ids: Optional[List[int]] = None
actor_ids: Optional[List[int]] = None
# Properties shared by models stored in DB
class MovieInDBBase(MovieBase):
id: int
director_id: Optional[int] = None
class Config:
from_attributes = True
# Properties to return to client
class Movie(MovieInDBBase):
pass
# Properties properties stored in DB
class MovieInDB(MovieInDBBase):
pass
# Forward references for circular imports
if TYPE_CHECKING:
from app.api.schemas.director import Director
from app.api.schemas.genre import Genre
from app.api.schemas.actor import Actor
# Properties for movie with details
class MovieDetails(Movie):
director: Optional["Director"] = None
genres: List["Genre"] = []
actors: List["Actor"] = []
# Import the forward references after the class definitions
# to avoid circular import issues
from app.api.schemas.director import Director # noqa: E402
from app.api.schemas.genre import Genre # noqa: E402
from app.api.schemas.actor import Actor # noqa: E402
# Update forward references
MovieDetails.model_rebuild()
# Properties for list
class MovieList(BaseModel):
data: List[Movie]
total: int