Skip to content

feat: Email Service (Template Preview + SES template uploader)#419

Draft
grecoww wants to merge 9 commits intodevelopfrom
feat/emailTemplates
Draft

feat: Email Service (Template Preview + SES template uploader)#419
grecoww wants to merge 9 commits intodevelopfrom
feat/emailTemplates

Conversation

@grecoww
Copy link
Copy Markdown
Member

@grecoww grecoww commented Oct 1, 2025

No description provided.

@Joabesv
Copy link
Copy Markdown
Member

Joabesv commented Oct 1, 2025

@grecoww a unica maneira aqui é com rollup? o proprio vite esta parando de usar o ideal se REALMENTE for necessario e utilizar rolldown

@grecoww
Copy link
Copy Markdown
Member Author

grecoww commented Oct 1, 2025

@grecoww a unica maneira aqui é com rollup? o proprio vite esta parando de usar o ideal se REALMENTE for necessario e utilizar rolldown

@Joabesv
Estou planejando fazer o seguinte:

  • usar oque foi implementado para a camada de deploy para o ses (vou unificar o comando de deploy com o build)
  • adicionar o vite para a camada de preview dos emails

ps:
estou optando por isso e nao usando o vite para tudo, pq no meu ver nao eh possivel renderizar o html e salvar no meu pc local, visto que o vite estara executando todo o codigo no browser, desta forma preciso de uma etapa de compilacao com o nodejs como runtime. Dessa forma vejo que a maneira mais simples eh com rollup, porem podemos substituir essa implementacao "low level" por um pacote de renderizacao que faca a mesma coisa por baixo dos panos, como o vue-email-cli, vite-node ou o nuxt/nitro.

ps2:
se achar uma forma melhor da que eu estou pensando, porfavor me diga que eu seguirei por ela. Dado isso, vou esperar aqui sua resposta para continuar a trabalhar na issue.

@Joabesv
Copy link
Copy Markdown
Member

Joabesv commented Oct 1, 2025

Cara por pontos @grecoww
1 unificar script, não acho certo build != deploy, caso isso rode na pipe de pr ele tem q buildar com sucesso pra garantir q nada se alterou.

2 vite consegue sim renderizar html para o seu pc local usando o próprio rollup options (não q a gente deva utilizar), mas o meu ponto principal é o seguinte, pq não podemos rodar vite dev e ver o código vue em alto nível no browser? Não tem problema q ele esteja plugado no framework pra mostrar isso

  1. Acho q o setup tradicional de vite dev e dps buildar mais saudável.

Último ponto, o package pode se chamar somente email

Fica a vontade pra complementar @mateusbrg

@grecoww
Copy link
Copy Markdown
Member Author

grecoww commented Oct 1, 2025

@Joabesv
1 - Faz sentido, beleza.
2 - Com certeza podemos rodar o vite dev e ver o vue em alto nivel (é exatamente oq eu quero fazer com o vite), mas o problema é na hora de mandar o html+txt renderizado para o SES, como vamos fazer isso sem ter o html+txt renderizado e armazenado numa pasta dentro do repo?

Atualizarei o nome para somente: email 👍

@Joabesv
Copy link
Copy Markdown
Member

Joabesv commented Oct 2, 2025

@grecoww Vc pode sempre rodar o comando build pra gerar o html e txt localmente, esse cara não deve ser comittado inclusive.
Para fazer o deploy desse cara basta criarmos uma pipeline com GitHub actions, mesma cosia que fazemos no front, você roda o projeto sem gerar nada estático local concorda? A pipe gera isso na hora do deploy

@grecoww
Copy link
Copy Markdown
Member Author

grecoww commented Oct 2, 2025

@grecoww Vc pode sempre rodar o comando build pra gerar o html e txt localmente, esse cara não deve ser comittado inclusive. Para fazer o deploy desse cara basta criarmos uma pipeline com GitHub actions, mesma cosia que fazemos no front, você roda o projeto sem gerar nada estático local concorda? A pipe gera isso na hora do deploy

@Joabesv Show, acho uma ótima solução, agnt pode ir uma call pra conversar e se alinhar melhor? Porque por mais que concorde com a solução ainda não entendi como ela será viável. (Não entendo onde o html+txt do template isolado pode sair na build dist no vite). Mas enquanto isso vou continuando a parte de visualizacao dos templates com o vite.

@grecoww grecoww changed the title feat: add vue compiler + vue-email render + SES uploader feat: Email Service (Template Preview + SES template uploader) Oct 2, 2025
@brMonteiro-G
Copy link
Copy Markdown
Member

Acompanhando aqui pessoal! Bora pra cima

Comment on lines +56 to +63
if (error.name === 'AlreadyExistsException') {
// Se template ja existe, atualiza
const updateCommand = new UpdateTemplateCommand(templateParams);
await sesClient.send(updateCommand);
console.log(`✅ Template ${templateName} atualizado no SES`);
} else {
console.error(`Erro ao fazer upload do template ${templateName}:`, error);
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

possibilidade de refactor para handle error

Facilita leitura

await sesClient.send(createCommand);
console.log(`✅ Template ${templateName} criado no SES`);
} catch (error) {
if (error.name === 'AlreadyExistsException') {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

existe um comando mais adequado para descobrir o tipo de uma exceção!

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof

Comment on lines +71 to +75
if (fileName.endsWith('.vue')) {
const templateName = path.parse(fileName).name;
console.log(`Uploading template: ${templateName}`);
await sendTemplateToSES(templateName);
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

possibilidade de função para melhorar leitura

alem disso, procure entender um pouco melhor o conceito de early return (caminho das negativas) ele permite uma leitura mais fluida do codigo, aumentando manutenabilidade (quem for dar manutencao tem mais facilidade)

<Html lang="en">
<Text>{{ title }}</Text>
<Hr />
<Button href="https://example.com">Click me</Button>
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

O fato de ser um teste me deixa com a duvida se deveria estar aqui.. é um arquivo que deveriamos ter apagado?

Copy link
Copy Markdown
Member Author

@grecoww grecoww Oct 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aqui, segui a mesma filosofia justificada na omissão do linter. Por conta de ser uma POC, deixei essa template temporariamente no PR, para que os demais membros possam testar rapidamente a funcionalidade de visualizar os templates com o servidor vite, com o roteamento primitivo que eu desenvolvi.

Comment thread eslint.config.js
},
},
{
ignores: ['apps/email/**/*'],
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pq?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Por conta de ser apenas uma POC, fiz isso para acelerar o desenvolvimento. Com o tradeoff de não ter um linting me avisando de possiveis más práticas, com certeza.

@mateusbrg mateusbrg changed the base branch from main to develop October 4, 2025 22:01
@mateusbrg mateusbrg added the do not merge don't merge this PR label Oct 11, 2025
@mateusbrg mateusbrg marked this pull request as draft October 11, 2025 17:42
@mateusbrg mateusbrg self-assigned this Oct 11, 2025
@mateusbrg
Copy link
Copy Markdown
Member

att: estou trabalhando nisso tbm no momento

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

do not merge don't merge this PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants