From 4c0bdcbd6ab3b1f02fa84f91ef0f7dd03ffeed07 Mon Sep 17 00:00:00 2001 From: StepanovPlaton Date: Sat, 6 Jul 2024 20:08:30 +0400 Subject: [PATCH] Complete genres and actors --- database/crud/audiobooks.py | 8 ++++++-- database/crud/games.py | 8 ++++++-- database/crud/movies.py | 11 ++++++++--- database/schemas/audiobooks.py | 6 +++--- database/schemas/games.py | 6 +++--- database/schemas/movies.py | 9 ++++----- routes/audiobooks.py | 7 +------ routes/games.py | 7 +------ routes/movies.py | 7 +------ 9 files changed, 33 insertions(+), 36 deletions(-) diff --git a/database/crud/audiobooks.py b/database/crud/audiobooks.py index 949d164..973d6d3 100644 --- a/database/crud/audiobooks.py +++ b/database/crud/audiobooks.py @@ -21,14 +21,18 @@ class AudiobooksCRUD(EntityCRUD[mdl.Audiobook]): async def change_genres(db: AsyncSession, audiobook: mdl.Audiobook, info: sch.AudiobookCreate): audiobook_genres = await AudiobookGenresCRUD.get_all(db) if (info.genres): + genres_id = [genre.id for genre in info.genres] audiobook.genres = [ - genre for genre in audiobook_genres if genre.id in info.genres] + genre for genre in audiobook_genres if genre.id in genres_id] @staticmethod async def add(db: AsyncSession, info: sch.AudiobookCreate, owner_id: int): - audiobook = mdl.Audiobook(**info.model_dump(), + audiobook_data_db = \ + {k: v for k, v in info.model_dump().items() + if not k in ["genres", "update_date"]} + audiobook = mdl.Audiobook(**audiobook_data_db, update_date=strftime("%Y-%m-%d %H:%M:%S"), owner_id=owner_id) await AudiobooksCRUD.change_genres(db, audiobook, info) diff --git a/database/crud/games.py b/database/crud/games.py index dce795e..9555604 100644 --- a/database/crud/games.py +++ b/database/crud/games.py @@ -21,14 +21,18 @@ class GamesCRUD(EntityCRUD[mdl.Game]): async def change_genres(db: AsyncSession, game: mdl.Game, info: sch.GameCreate): game_genres = await GameGenresCRUD.get_all(db) if (info.genres): + genres_id = [genre.id for genre in info.genres] game.genres = [ - genre for genre in game_genres if genre.id in info.genres] + genre for genre in game_genres if genre.id in genres_id] @staticmethod async def add(db: AsyncSession, info: sch.GameCreate, owner_id: int): - game = mdl.Game(**info.model_dump(), + game_data_db = \ + {k: v for k, v in info.model_dump().items() + if not k in ["genres", "update_date"]} + game = mdl.Game(**game_data_db, update_date=strftime("%Y-%m-%d %H:%M:%S"), owner_id=owner_id) await GamesCRUD.change_genres(db, game, info) diff --git a/database/crud/movies.py b/database/crud/movies.py index 243aaa8..35cf380 100644 --- a/database/crud/movies.py +++ b/database/crud/movies.py @@ -22,21 +22,26 @@ class MoviesCRUD(EntityCRUD[mdl.Movie]): async def change_actors(db: AsyncSession, movie: mdl.Movie, info: sch.MovieCreate): movie_actors = await MovieActorsCRUD.get_all(db) if (info.actors): + actors_id = [actor.id for actor in info.actors] movie.actors = [ - actor for actor in movie_actors if actor.id in info.actors] + actor for actor in movie_actors if actor.id in actors_id] @staticmethod async def change_genres(db: AsyncSession, movie: mdl.Movie, info: sch.MovieCreate): movie_genres = await MovieGenresCRUD.get_all(db) if (info.genres): + genres_id = [genre.id for genre in info.genres] movie.genres = [ - genre for genre in movie_genres if genre.id in info.genres] + genre for genre in movie_genres if genre.id in genres_id] @staticmethod async def add(db: AsyncSession, info: sch.MovieCreate, owner_id: int): - movie = mdl.Movie(**info.model_dump(), + movie_data_db = \ + {k: v for k, v in info.model_dump().items() + if not k in ["actors", "genres", "update_date"]} + movie = mdl.Movie(**movie_data_db, update_date=strftime("%Y-%m-%d %H:%M:%S"), owner_id=owner_id) await MoviesCRUD.change_genres(db, movie, info) diff --git a/database/schemas/audiobooks.py b/database/schemas/audiobooks.py index 3d8c336..890c4c2 100644 --- a/database/schemas/audiobooks.py +++ b/database/schemas/audiobooks.py @@ -40,17 +40,17 @@ class AudiobookBase(AudiobookCardBase): duration: Optional[str] = Field(default=None, examples=["12:38"]) reader: Optional[str] = Field(default=None, examples=["Дмитрий Хазанович"]) + genres: Optional[list[AudiobookGenre]] = Field() + class AudiobookCreate(AudiobookBase): - genres: Optional[list[int]] = Field(default=None, examples=[[1, 2]]) + ... class Audiobook(AudiobookBase): id: int = Field(examples=[1]) update_date: str = Field(examples=["2024-06-14 12:00:00"]) - genres: list[AudiobookGenre] = Field() - owner: User = Field() model_config = ConfigDict(from_attributes=True) diff --git a/database/schemas/games.py b/database/schemas/games.py index 51a277c..129f7b6 100644 --- a/database/schemas/games.py +++ b/database/schemas/games.py @@ -41,17 +41,17 @@ class GameBase(GameCardBase): release_date: Optional[str] = Field(default=None, examples=["2014"]) download_size: Optional[str] = Field(default=None, examples=["80Mb"]) + genres: Optional[list[GameGenre]] = Field() + class GameCreate(GameBase): - genres: Optional[list[int]] = Field(default=None, examples=[[1, 2]]) + ... class Game(GameBase): id: int = Field(examples=[1]) update_date: str = Field(examples=["2024-05-13 12:00:00"]) - genres: list[GameGenre] = Field() - owner: User = Field() model_config = ConfigDict(from_attributes=True) diff --git a/database/schemas/movies.py b/database/schemas/movies.py index 2711d9c..00f7c9c 100644 --- a/database/schemas/movies.py +++ b/database/schemas/movies.py @@ -45,19 +45,18 @@ class MovieBase(MovieCardBase): country: Optional[str] = \ Field(default=None, examples=["США, Великобритания, Канада"]) + genres: Optional[list[MovieGenre]] = Field() + actors: Optional[list[MovieActor]] = Field() + class MovieCreate(MovieBase): - genres: Optional[list[int]] = Field(default=None, examples=[[1, 2]]) - actors: Optional[list[int]] = Field(default=None, examples=[[1, 2]]) + ... class Movie(MovieBase): id: int = Field(examples=[1]) update_date: str = Field(examples=["2024-06-11 12:00:00"]) - genres: list[MovieGenre] = Field() - actors: list[MovieActor] = Field() - owner: User = Field() model_config = ConfigDict(from_attributes=True) diff --git a/routes/audiobooks.py b/routes/audiobooks.py index f79b14b..73e5258 100644 --- a/routes/audiobooks.py +++ b/routes/audiobooks.py @@ -13,16 +13,11 @@ async def get_audiobook(audiobook_id: int, db_session: AsyncSession = Depends(Da return await AudiobooksCRUD.get(db_session, audiobook_id) -@audiobooks_router.get("/cards", response_model=list[AudiobookCard]) +@audiobooks_router.get("", response_model=list[AudiobookCard]) async def get_audiobooks_cards(db_session: AsyncSession = Depends(Database.get_session)): return await AudiobooksCRUD.get_all(db_session) -@audiobooks_router.get("", response_model=list[Audiobook]) -async def get_audiobooks(db_session: AsyncSession = Depends(Database.get_session)): - return await AudiobooksCRUD.get_all(db_session) - - @audiobooks_router.post("", response_model=Audiobook) async def add_audiobook(audiobook: AudiobookCreate, user: User = Depends(get_user), diff --git a/routes/games.py b/routes/games.py index f1a6fcd..e4407e1 100644 --- a/routes/games.py +++ b/routes/games.py @@ -14,16 +14,11 @@ async def get_game(game_id: int, db_session: AsyncSession = Depends(Database.get return await GamesCRUD.get(db_session, game_id) -@games_router.get("/cards", response_model=list[GameCard]) +@games_router.get("", response_model=list[GameCard]) async def get_games_cards(db_session: AsyncSession = Depends(Database.get_session)): return await GamesCRUD.get_all(db_session) -@games_router.get("", response_model=list[Game]) -async def get_games(db_session: AsyncSession = Depends(Database.get_session)): - return await GamesCRUD.get_all(db_session) - - @games_router.post("", response_model=Game) async def add_game(game: GameCreate, user: User = Depends(get_user), diff --git a/routes/movies.py b/routes/movies.py index 56246c0..d4d5e7b 100644 --- a/routes/movies.py +++ b/routes/movies.py @@ -13,16 +13,11 @@ async def get_movie(movie_id: int, db_session: AsyncSession = Depends(Database.g return await MoviesCRUD.get(db_session, movie_id) -@movies_router.get("/cards", response_model=list[MovieCard]) +@movies_router.get("", response_model=list[MovieCard]) async def get_movies_cards(db_session: AsyncSession = Depends(Database.get_session)): return await MoviesCRUD.get_all(db_session) -@movies_router.get("", response_model=list[Movie]) -async def get_movies(db_session: AsyncSession = Depends(Database.get_session)): - return await MoviesCRUD.get_all(db_session) - - @movies_router.post("", response_model=Movie) async def add_movie(movie: MovieCreate, user: User = Depends(get_user),