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]