from sqlalchemy.orm import Session from app.db.mock_models import User class UserRepository: def __init__(self, db: Session): """Inicializa o repositorio de usuarios com a sessao ativa.""" self.db = db def get_by_channel_external_id(self, channel: str, external_id: str): """Busca usuario por canal e identificador externo.""" return ( self.db.query(User) .filter( User.channel == channel, User.external_id == external_id, ) .first() ) def get_by_id(self, user_id: int | None): """Busca usuario pelo identificador interno.""" if user_id is None: return None return self.db.query(User).filter(User.id == user_id).first() def create( self, channel: str, external_id: str, name: str | None = None, username: str | None = None, ): """Cria e persiste um novo usuario.""" user = User( channel=channel, external_id=external_id, name=name, username=username, ) self.db.add(user) self.db.commit() self.db.refresh(user) return user def update_identity( self, user: User, name: str | None, username: str | None, ): """Atualiza dados basicos de identidade quando houver mudancas.""" changed = False if name and name != user.name: user.name = name changed = True if username and username != user.username: user.username = username changed = True if changed: self.db.commit() self.db.refresh(user) return user def update_email( self, user: User, email: str | None, ): """Atualiza email persistido do usuario.""" normalized_email = str(email or "").strip().lower() or None if normalized_email == user.email: return user user.email = normalized_email self.db.commit() self.db.refresh(user) return user