0
respostas

[Sugestão] Sistema de notificação inteligente

import asyncio

# Base de dados: Uma lista de dicionários para facilitar a expansao
# Prioridades: 1 para VIP, 2 para Comum, 3 para Desvinculado
usuarios = [
    {"nome": "Ana", "tipo": "VIP", "prioridade": 1, "ativo": True},
    {"nome": "Bruno", "tipo": "VIP", "prioridade": 1, "ativo": True},
    {"nome": "Joao", "tipo": "Comum", "prioridade": 2, "ativo": False},
    {"nome": "Maria", "tipo": "Comum", "prioridade": 2, "ativo": True},
    {"nome": "Carla", "tipo": "Desvinculado", "prioridade": 3, "ativo": True},
    {"nome": "Douglas", "tipo": "Desvinculado", "prioridade": 3, "ativo": True},
]

async def processar_notificacao(user):
    # Simula o processamento paralelo (todos esperam juntos)
    await asyncio.sleep(1)
    
    nome = user["nome"]
    
    # Logica de filtro
    if user["prioridade"] == 3:
        msg = f"USUARIO {nome}: Conta desvinculada. Nao notificar."
    elif not user["ativo"]:
        msg = f"USUARIO {nome}: Notificacoes desativadas pelo usuario."
    else:
        prefixo = "[VIP]" if user["prioridade"] == 1 else "[COMUM]"
        msg = f"{prefixo} Notificacao enviada para {nome}."
    
    # Retornamos a prioridade para poder ordenar depois
    return (user["prioridade"], msg)

async def main():
    print(f"Processando {len(usuarios)} usuarios simultaneamente...\n")
    
    # Dispara todas as tarefas de uma vez
    tarefas = [processar_notificacao(u) for u in usuarios]
    resultados = await asyncio.gather(*tarefas)
    
    # Ordena por prioridade (1, 2, 3)
    resultados.sort()
    
    # Exibe o resultado final organizado
    for _, mensagem in resultados:
        print(mensagem)

if __name__ == "__main__":
    asyncio.run(main())