from sqlmodel import Session, select
from sqlalchemy.orm import joinedload
from .models import Pessoa, Livro, engine


def create_livros(titulo: str, pessoa_id: int):
    livro = Livro(titulo=titulo, pessoa_id=pessoa_id)

    with Session(engine) as session:
        session.add(livro)
        session.commit()
        session.refresh(livro)

    return livro

def get_livros():
    query = select(Livro).options(joinedload('*'))
    with Session(engine) as session:
        result = session.execute(query).scalars().unique().all()

    return result


def create_pessoas(idade: int, nome: str):
    person = Pessoa(nome=nome, idade=idade)

    with Session(engine) as session:
        session.add(person)
        session.commit()
        session.refresh(person)

    return person

def get_pessoas(
    id: int = None,
    idade: int = None,
    limit: int = 5,
):
    query = select(Pessoa)

    if id:
        query = query.where(Pessoa.id == id)
    if idade:
        query = query.where(Pessoa.idade == idade)
    if limit:
        query = query.limit(limit)

    with Session(engine) as session:
        result = session.execute(query).scalars().all()

    return result

sqlalchemy.orm.joinedload sqlmodel.select sqlmodel.Session
[((878, 892), 'sqlmodel.select', 'select', (['Pessoa'], {}), '(Pessoa)\n', (884, 892), False, 'from sqlmodel import Session, select\n'), ((231, 246), 'sqlmodel.Session', 'Session', (['engine'], {}), '(engine)\n', (238, 246), False, 'from sqlmodel import Session, select\n'), ((413, 428), 'sqlalchemy.orm.joinedload', 'joinedload', (['"""*"""'], {}), "('*')\n", (423, 428), False, 'from sqlalchemy.orm import joinedload\n'), ((439, 454), 'sqlmodel.Session', 'Session', (['engine'], {}), '(engine)\n', (446, 454), False, 'from sqlmodel import Session, select\n'), ((650, 665), 'sqlmodel.Session', 'Session', (['engine'], {}), '(engine)\n', (657, 665), False, 'from sqlmodel import Session, select\n'), ((1074, 1089), 'sqlmodel.Session', 'Session', (['engine'], {}), '(engine)\n', (1081, 1089), False, 'from sqlmodel import Session, select\n'), ((391, 404), 'sqlmodel.select', 'select', (['Livro'], {}), '(Livro)\n', (397, 404), False, 'from sqlmodel import Session, select\n')]