From 06daf89d5ffc75951d2f83215cd0207e5af27cf7 Mon Sep 17 00:00:00 2001 From: Max Date: Sun, 19 Jan 2025 21:58:36 +0200 Subject: [PATCH] temporary commit --- src/routes/movies.py | 73 ++++++++++++++++++++++++++----------------- src/schemas/movies.py | 23 +++++++++++--- 2 files changed, 62 insertions(+), 34 deletions(-) diff --git a/src/routes/movies.py b/src/routes/movies.py index 2267b01..bbdaded 100644 --- a/src/routes/movies.py +++ b/src/routes/movies.py @@ -3,7 +3,13 @@ from sqlalchemy.orm import Session, joinedload import datetime from database import get_db -from database.models import MovieModel, CountryModel, GenreModel, ActorModel, LanguageModel +from database.models import ( + MovieModel, + CountryModel, + GenreModel, + ActorModel, + LanguageModel, +) from schemas.movies import MovieListResponse, MovieDetail, MovieCreate, MovieUpdate @@ -14,19 +20,25 @@ @router.get("/movies/", response_model=MovieListResponse) def get_movies( - db: Session = Depends(get_db), - page: int = Query(1, ge=1), - per_page: int = Query(10, ge=1, le=20) + db: Session = Depends(get_db), + page: int = Query(1, ge=1), + per_page: int = Query(10, ge=1, le=20), ): - movies = db.query(MovieModel).order_by(MovieModel.id.desc()).offset((page - 1) * per_page).limit(per_page).all() + movies = ( + db.query(MovieModel) + .order_by(MovieModel.id.desc()) + .offset((page - 1) * per_page) + .limit(per_page) + .all() + ) print(f"print get_movies: {movies}") if not movies: raise HTTPException(status_code=404, detail="No movies found.") prev_page = f"/theater/movies/?page={page - 1}&per_page={per_page}" - next_page =f"/theater/movies/?page={page + 1}&per_page={per_page}" + next_page = f"/theater/movies/?page={page + 1}&per_page={per_page}" total_items = db.query(MovieModel).count() total_pages = (total_items // per_page) + (1 if total_items % per_page > 0 else 0) @@ -43,20 +55,18 @@ def get_movies( @router.post("/movies/", response_model=MovieDetail, status_code=201) -def create_movie( - movie: MovieCreate, - db: Session = Depends(get_db) -): - db_movie = db.query(MovieModel).filter( - MovieModel.name == movie.name - ).filter( - MovieModel.date == movie.date - ).first() +def create_movie(movie: MovieCreate, db: Session = Depends(get_db)): + db_movie = ( + db.query(MovieModel) + .filter(MovieModel.name == movie.name) + .filter(MovieModel.date == movie.date) + .first() + ) if db_movie: raise HTTPException( status_code=409, - detail=f"A movie with the name '{db_movie.name}' and release date '{db_movie.date}' already exists." + detail=f"A movie with the name '{db_movie.name}' and release date '{db_movie.date}' already exists.", ) if movie.date > datetime.datetime.now().date() + datetime.timedelta(days=365): @@ -73,7 +83,11 @@ def create_movie( if movie.languages: # languages.extend(check_or_create_many_instances_by_name(movie.languages, LanguageModel, db)) for language_name in movie.languages: - language = db.query(LanguageModel).filter(LanguageModel.name == language_name).first() + language = ( + db.query(LanguageModel) + .filter(LanguageModel.name == language_name) + .first() + ) if not language: language = LanguageModel(name=language_name) db.add(language) @@ -135,35 +149,36 @@ def create_movie( @router.get("/movies/{movie_id}/", response_model=MovieDetail) -def get_movie( - movie_id: int, - db: Session = Depends(get_db) -): +def get_movie(movie_id: int, db: Session = Depends(get_db)): movie = db.query(MovieModel).filter(MovieModel.id == movie_id).first() print(f"print get_movie: {movie}") if not movie: - raise HTTPException(status_code=404, detail="Movie with the given ID was not found.") + raise HTTPException( + status_code=404, detail="Movie with the given ID was not found." + ) return movie @router.delete("/movies/{movie_id}/", status_code=204) -def delete_movie( - movie_id: int, - db: Session = Depends(get_db) -): +def delete_movie(movie_id: int, db: Session = Depends(get_db)): movie = db.query(MovieModel).filter(MovieModel.id == movie_id).first() print(f"print delete_movie: {movie}") if not movie: - raise HTTPException(status_code=404, detail="Movie with the given ID was not found.") + raise HTTPException( + status_code=404, detail="Movie with the given ID was not found." + ) db.delete(movie) db.commit() + @router.patch("/movies/{movie_id}/", status_code=200) def edit_movie(movie_id: int, movie_data: MovieUpdate, db: Session = Depends(get_db)): movie = db.query(MovieModel).filter(MovieModel.id == movie_id).first() print(f"print edit_movie: {movie} and {movie_id}") if not movie: - raise HTTPException(status_code=404, detail="Movie with the given ID was not found.") + raise HTTPException( + status_code=404, detail="Movie with the given ID was not found." + ) try: movie_date = movie_data.model_dump(exclude_unset=True) @@ -228,4 +243,4 @@ def edit_movie(movie_id: int, movie_data: MovieUpdate, db: Session = Depends(get # # db.commit() # db.refresh(db_movie) - # return {"detail": "Movie updated successfully.", "movie": db_movie} \ No newline at end of file + # return {"detail": "Movie updated successfully.", "movie": db_movie} diff --git a/src/schemas/movies.py b/src/schemas/movies.py index de0407b..5780119 100644 --- a/src/schemas/movies.py +++ b/src/schemas/movies.py @@ -19,36 +19,43 @@ class Movie(BaseModel): budget: float revenue: float + class Genre(BaseModel): name: str movies: list[Movie] model_config = {"from_attributes": True} + class GenreDetail(BaseModel): id: int name: str + class Actor(BaseModel): name: str movies: list[Movie] model_config = {"from_attributes": True} + class ActorDetail(BaseModel): id: int name: str + class Language(BaseModel): name: str movies: list[Movie] model_config = {"from_attributes": True} + class LanguageDetail(BaseModel): id: int name: str + class Country(BaseModel): code: str name: Optional[str] @@ -56,17 +63,18 @@ class Country(BaseModel): model_config = {"from_attributes": True} + class CountryDetail(BaseModel): id: int code: str name: Optional[str] - - class MovieCreate(BaseModel): name: str = Field(max_length=255) - date: datetime.date #= Field(lt=datetime.date.today() + datetime.timedelta(days=365)) + date: ( + datetime.date + ) # = Field(lt=datetime.date.today() + datetime.timedelta(days=365)) score: float = Field(ge=0, le=100) overview: str status: MovieStatus @@ -79,6 +87,7 @@ class MovieCreate(BaseModel): model_config = {"from_attributes": True} + class MovieDetail(Movie): id: int country: Optional[CountryDetail] = None @@ -86,6 +95,7 @@ class MovieDetail(Movie): actors: Optional[list[ActorDetail]] = None languages: Optional[list[LanguageDetail]] = None + class MovieList(BaseModel): id: int name: str @@ -93,6 +103,7 @@ class MovieList(BaseModel): score: float overview: str + class MovieListResponse(BaseModel): movies: list[MovieList] prev_page: str | None @@ -100,12 +111,14 @@ class MovieListResponse(BaseModel): total_pages: int total_items: int + class MovieUpdate(Movie): name: Optional[str] = Field(max_length=255, default=None) - date: Optional[datetime.date] = Field(lt=datetime.date.today() + datetime.timedelta(days=365), default=None) + date: Optional[datetime.date] = Field( + lt=datetime.date.today() + datetime.timedelta(days=365), default=None + ) overview: Optional[str] = None status: Optional[MovieStatus] = None score: Optional[float] = Field(ge=0, le=100, default=None) budget: Optional[float] = Field(gt=0, default=None) revenue: Optional[float] = Field(gt=0, default=None) -