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_id(self, user_id: int): """Busca usuario por ID interno.""" return self.db.query(User).filter(User.id == user_id).first() 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 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