from services.auth_service import ( get_user_by_username, get_user_by_id, get_all_users, create_user, update_user, delete_user ) # Este archivo importa funcionalidades de auth_service.py para mantener # consistencia en la estructura del proyecto, y agrega funcionalidades específicas # de gestión de usuarios que no están relacionadas con la autenticación. def filter_users(filter_params): """ Filtrar usuarios según los parámetros proporcionados. Args: filter_params (dict): Diccionario con parámetros de filtrado - empresa: Nombre de empresa - estado: Estado del usuario ('activo', 'inactivo') - nivel_min: Nivel mínimo de permiso - nivel_max: Nivel máximo de permiso Returns: list: Lista de objetos User que cumplen los criterios """ users = get_all_users() filtered_users = [] for user in users: # Filtrar por empresa if 'empresa' in filter_params and filter_params['empresa']: if user.empresa != filter_params['empresa']: continue # Filtrar por estado if 'estado' in filter_params and filter_params['estado']: if user.estado != filter_params['estado']: continue # Filtrar por nivel mínimo if 'nivel_min' in filter_params and filter_params['nivel_min'] is not None: if user.nivel < int(filter_params['nivel_min']): continue # Filtrar por nivel máximo if 'nivel_max' in filter_params and filter_params['nivel_max'] is not None: if user.nivel > int(filter_params['nivel_max']): continue # Si pasó todos los filtros, agregar a la lista filtered_users.append(user) return filtered_users def get_user_stats(): """ Obtener estadísticas sobre los usuarios. Returns: dict: Diccionario con estadísticas """ users = get_all_users() # Inicializar estadísticas stats = { 'total': len(users), 'activos': 0, 'inactivos': 0, 'expirados': 0, 'por_empresa': {}, 'por_nivel': { 'admin': 0, # Nivel 9000+ 'gestor': 0, # Nivel 5000-8999 'editor': 0, # Nivel 1000-4999 'lector': 0 # Nivel 0-999 } } # Calcular estadísticas for user in users: # Estado if user.estado == 'activo': stats['activos'] += 1 else: stats['inactivos'] += 1 # Expirados if user.is_expired(): stats['expirados'] += 1 # Por empresa empresa = user.empresa or 'Sin empresa' stats['por_empresa'][empresa] = stats['por_empresa'].get(empresa, 0) + 1 # Por nivel if user.nivel >= 9000: stats['por_nivel']['admin'] += 1 elif user.nivel >= 5000: stats['por_nivel']['gestor'] += 1 elif user.nivel >= 1000: stats['por_nivel']['editor'] += 1 else: stats['por_nivel']['lector'] += 1 return stats def check_username_availability(username): """ Verificar si un nombre de usuario está disponible. Args: username (str): Nombre de usuario a verificar Returns: bool: True si está disponible, False si ya existe """ user = get_user_by_username(username) return user is None