from app.database.models import ComercialFisica from app.database.session import sessionmanager from sqlalchemy import select from sqlalchemy.orm import selectinload async def add_or_update_person(session, model, filters, data): print("Executando add_or_update_person...") # Usando selectinload para evitar carregamento preguiçoso inesperado result = await session.execute( select(model).options(selectinload("*")).filter_by(**filters) ) entity = result.scalars().first() if not entity: print("Nenhuma pessoa encontrada com os filtros fornecidos. Criando nova pessoa.") entity = model(**data) session.add(entity) else: print("Pessoa já existente encontrada. Atualizando informações.") for key, value in data.items(): setattr(entity, key, value) return entity async def initialize_person(): print("Iniciando processo de criação/atualização de pessoa...") async with sessionmanager.session() as session: # Dados da pessoa pessoa_data = { "pessoa_telefone": "00000000000", # Exemplo de telefone "pessoa_celular": "00000000000", # Exemplo de celular "pessoa_email": "admin@sonora.com", # Exemplo de email "pessoa_status": True, "pessoa_tipo": "1", # Tipo especificado "fisica_nome": "Admin", # Nome da pessoa "fisica_cpf": "00000000000", # Exemplo de CPF "fisica_genero": "O", # Gênero "fisica_rg": "1.234.567", # Exemplo de RG } print("Dados da pessoa para criação/atualização:", pessoa_data) # Criando ou atualizando a pessoa pessoa = await add_or_update_person( session, ComercialFisica, {"pessoa_email": pessoa_data["pessoa_email"]}, pessoa_data ) print("Pessoa criada ou atualizada, realizando commit...") # Confirmando alterações no banco await session.commit() # Garantindo que os dados estão totalmente carregados await session.refresh(pessoa) # Retornando o UUID da pessoa print(f"Pessoa criada com UUID: {pessoa.uuid}") return pessoa