95 lines
2.9 KiB
Python
95 lines
2.9 KiB
Python
|
|
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()
|