Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Melhorias envolvendo envio de emails #1632

Merged
merged 3 commits into from
Feb 22, 2024
Merged

Melhorias envolvendo envio de emails #1632

merged 3 commits into from
Feb 22, 2024

Conversation

aprendendofelipe
Copy link
Collaborator

Mudanças realizadas

Baseado na conversa em #1630...

Contingência de serviço de envio de email

  • Permite adicionar mais de um serviço de email para utilização automática em caso de erro no principal.
  • Para adicionar mais serviços, basta adicionar 2, 3, 4... ao final das variáveis de ambiente de email.
  • Adiciona uma retentativa de envio de email para cada diferente serviço configurado. Em caso de erro, serão efetuadas duas tentativas para cada serviço.
  • Registra logs internos de ServiceError se houver problema em qualquer tentativa de envio de email, mesmo que alguma das tentativas tenha sucesso.
  • Com isso podemos testar mais uma vez o Resend sem os riscos dos problemas que enfrentamos em Migrar conta de Mailgun do TabNews para conta do curso.dev #1614 e Muda tipo de segurança da conexão SMTP de SMTPS para STARTTLS #1616.

Respostas via stream

  • Adiciona a possibilidade de respostas via stream na API.
  • Adequa também as respostas de erro via stream.
  • Implementa respostas via stream para as requisições de criação de comentários, o que permite devolver a informação de que a publicação foi realizada com sucesso enquanto o processamento do envio de email de notificação ainda está ocorrendo.
  • Para não haver breaking change , a resposta continua sendo enviada como JSON único por padrão, mas para publicações de comentários em que for enviado o header Accept: 'application/x-ndjson', a resposta poderá vir como um conjunto de JSON separados por quebras de linhas.
  • Adapta o front-end para enviar o cabeçalho e processar a resposta via stream. Em caso de sucesso na criação da publicação, mas em que ocorrer qualquer outro erro interno, o erro só será impresso no console do navegador.
  • Não podemos devolver muitas informações em caso de erros de serviços internos, então deixar o erro apenas no console parece suficiente para usuários que estiverem ativamente realizando testes.
  • Para quem utilizar a API sem enviar o cabeçalho application/x-ndjson, em caso de sucesso na publicação do comentário, mas com erro no envio da notificação, a requisição retornará com sucesso e o erro só estará presente nos logs internos.

As melhorias para contingência do serviço de email se aplicam a todos os emails, mas a resposta via stream, por enquanto, foi implementada apenas para a criação de comentários.

Resolve:

Possíveis melhorias relacionadas (para outro momento)

  • Processar em paralelo tudo que for possível dentro de cada requisição.
  • Estudar as possibilidades de utilizar um serviço externo de filas.

Tipo de mudança

  • Correção de bug
  • Nova funcionalidade

Checklist:

  • As modificações não geram novos logs de erro ou aviso (warning).
  • Eu adicionei testes que provam que a correção ou novo recurso funciona conforme esperado.
  • Tanto os novos testes quanto os antigos estão passando localmente.

@aprendendofelipe aprendendofelipe added front Envolve modificações no frontend back Envolve modificações no backend infra Mudanças relacionadas à infraestrutura bug Comportamento diferente do esperado labels Feb 21, 2024
Copy link

vercel bot commented Feb 21, 2024

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
tabnews ✅ Ready (Inspect) Visit Preview 💬 Add feedback Feb 22, 2024 5:00pm

@aprendendofelipe
Copy link
Collaborator Author

Apenas para mostrar a importância de uma contingência no serviço de email, acabamos de ter uma instabilidade no Mailgun que impediu o envio de dois emails com intervalo de 1 minuto, o que significa que poderia não ter sido suficiente a estratégia de apenas retentar o envio pelo mesmo serviço.

@filipedeschamps
Copy link
Owner

o que significa que poderia não ter sido suficiente a estratégia de apenas retentar o envio pelo mesmo serviço.

Posso confirmar que não teria sido suficiente, pois já tinha implementado a retentativa no curso (tenta 10x) e não foi o suficiente.

@aprendendofelipe
Copy link
Collaborator Author

Bora pro merge?

@aprendendofelipe
Copy link
Collaborator Author

Já está em produção e enviando email com sucesso pelo Resend 🚀🚀🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
back Envolve modificações no backend bug Comportamento diferente do esperado front Envolve modificações no frontend infra Mudanças relacionadas à infraestrutura
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Retornar resposta da criação de conteúdo independente do resultado da notificação
2 participants