66 lines
2.0 KiB
Python
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] |