new-project-2jus62/helpers/anime_helpers.py

66 lines
2.0 KiB
Python

from typing import List
from sqlalchemy.orm import Session
from models.anime import Anime
from schemas.anime import AnimeCreate, AnimeSchema
def create_anime(db: Session, anime_data: AnimeCreate) -> Anime:
"""
Creates a new anime in the database.
Args:
db (Session): The database session.
anime_data (AnimeCreate): The data for the anime to create.
Returns:
Anime: The newly created anime object.
"""
db_anime = Anime(**anime_data.dict())
db.add(db_anime)
db.commit()
db.refresh(db_anime)
return db_anime
def get_animes_by_names(db: Session, anime_names: List[str]) -> List[Anime]:
"""
Retrieves animes from the database by their names.
Args:
db (Session): The database session.
anime_names (List[str]): A list of anime names to search for.
Returns:
List[Anime]: A list of anime objects matching the provided names.
"""
return db.query(Anime).filter(Anime.name.in_(anime_names)).all()
def create_animes_in_bulk(db: Session, anime_names: List[str]) -> List[Anime]:
"""
Creates multiple animes in the database from a list of names.
Args:
db (Session): The database session.
anime_names (List[str]): A list of anime names to create.
Returns:
List[Anime]: A list of newly created anime objects.
"""
existing_animes = get_animes_by_names(db, anime_names)
existing_names = [anime.name for anime in existing_animes]
new_anime_names = [name for name in anime_names if name not in existing_names]
new_animes = [Anime(name=name) for name in new_anime_names]
db.add_all(new_animes)
db.commit()
return new_animes + existing_animes
def get_all_animes(db: Session) -> List[AnimeSchema]:
"""
Retrieves all animes from the database.
Args:
db (Session): The database session.
Returns:
List[AnimeSchema]: A list of all anime objects.
"""
animes = db.query(Anime).all()
return [AnimeSchema.from_orm(anime) for anime in animes]