from sqlalchemy.orm import joinedload from models.entities.usuario import Usuario from services.database_service import DatabaseService class UsuarioService: """Serviço para operações com usuários""" @staticmethod def listar_usuarios(): """Lista todos os usuários""" db = DatabaseService.get_db_connection() try: usuarios = db.query(Usuario).options( joinedload(Usuario.roles), joinedload(Usuario.militante), joinedload(Usuario.setor), joinedload(Usuario.cr), joinedload(Usuario.celula) ).all() return usuarios finally: db.close() @staticmethod def buscar_usuario(user_id): """Busca um usuário pelo ID""" db = DatabaseService.get_db_connection() try: usuario = db.query(Usuario).options( joinedload(Usuario.roles), joinedload(Usuario.militante), joinedload(Usuario.setor), joinedload(Usuario.cr), joinedload(Usuario.celula) ).get(user_id) return usuario finally: db.close() @staticmethod def buscar_por_username(username): """Busca um usuário pelo nome de usuário""" db = DatabaseService.get_db_connection() try: usuario = db.query(Usuario).filter(Usuario.username == username).first() return usuario finally: db.close() @staticmethod def buscar_por_email(email): """Busca um usuário pelo email""" db = DatabaseService.get_db_connection() try: usuario = db.query(Usuario).filter(Usuario.email == email).first() return usuario finally: db.close() @staticmethod def salvar_usuario(usuario): """Salva um usuário no banco de dados""" db = DatabaseService.get_db_connection() try: if usuario.id is None: # Novo usuário db.add(usuario) else: # Usuário existente db.merge(usuario) db.commit() return True except Exception as e: db.rollback() print(f"Erro ao salvar usuário: {e}") return False finally: db.close() @staticmethod def excluir_usuario(user_id): """Exclui um usuário pelo ID""" db = DatabaseService.get_db_connection() try: usuario = db.query(Usuario).get(user_id) if usuario: db.delete(usuario) db.commit() return True return False except Exception as e: db.rollback() print(f"Erro ao excluir usuário: {e}") return False finally: db.close()