Executando verificação de segurança...
2

bom dia, sr.

descreverei um fluxo.

cenário: MIL clientes atrasaram pagamento do dia 15 de uma provedora de internet. vão pagar dia 16, quando receberem lembrete meio dia.

fluxo:
cliente digita cpf para checar 2a via de boleto;
cliente termina de digitar, ele vai mover o mouse ou o dedo para clicar no botão "Consultar";
valida se cpf é válido ou não e já acusa;
por debaixo dos panos, o front-end envia uma requisição ao backend nestjs enquanto o cliente move o mouse;
o backend coloca a requisição numa fila bullmq usando redis na mesma rede docker;
a requisição exige sincronamente e sequencialmente consultar o cpf do cliente em uma API de um ERP com gateway de pagamento para provedores de internet. a api retorna o id do cliente. após o id do cliente ser retornado, requisitam-se todas as faturas do cliente dos últimos 12 e dos próximos 12 meses (não há filtro);
filtram-se os campos dia_pagamento=null para dia_vencimento > Date.now(), por exemplo, descobrem-se portanto as faturas atrasadas/vencidas;
filtram-se dados sensíveis como endereço, nome completo exposto (se não estiver no boleto ou a depender de outras regras de negócio), nome de celular, usuário de rede PPoE e outros dados de configuração de ponto de acesso de internet, plano detalhado, etc;
retornam-se da fatura os dados sobre qr code pix, pix copia cola, linha digital boleto, link pdf boleto (pode trancar a depender da regra de negócio), nome cliente com siglas, etc);
dessa forma, cada cliente da fila será processado em lote, e cada requisição à api externa não faz depender do próximo nem do prévio cliente, apenas o próprio cliente "João" esperaria a dele mesmo, e não da "Maria";
o processamento em lote, respeitando o rate limit da API externa, permite atender a mais clientes em paralelo, cada um em sua fila;
guardam-se esses dados de faturas para cada cpf em um cache Keyv com redis como store, pois o mesmo cliente pode fazer a mesma requisição novamente à toa no mesmo dia para aquela mesma fatura (tempo de cache depende da regra de negócio);
cada fatura filtrada retorna resposta ao requerente inicial separadamente;
nestjs inicia com mais instâncias, proporcionalmente ao número de vCPUs;

agora o cliente colocou o mouse em do botão, ele clica em "Consultar".
caso 01: instantaneamente, como um passe de mágica, o componente visual do frontend renderiza-se com aquilo que ele precisa ver;
caso 02: em horário de pico, o tempo de resposta pelo menos não vai passar de 01s. talvez, 100ms, 500ms.

terminei isso acima ontem. quando comecei?

cenário ideal overkill: adicionar funcionalidade de rotina de madrugada -> varrer a api do ERP externo e buscar pelos dados mais recentes dos clientes -> agenda fila de escrita em banco local assincronamente e agenda o próximo item deste fluxo -> se não pagou fatura há X dias (regra de negócio, lei, CDC, etc), então envia mensageria webpush/email/zap -> roda novamente a mesma rotina com leitura em banco de dados local em horários ideais ou dias escolhido pelo cliente (algum frontend? msg de zap com bot? contrato? lei? CDC? etc).

este seria um cenário de backend que pensa no UX, certo?

Carregando publicação patrocinada...
1