Skip to content

feat(conta): e-mail transacional, esqueci a senha e confirmacao do e-mail (tasks 55, 21, 50) - #38

Merged
andynnnfw merged 7 commits into
chore/operacao-qualidadefrom
feat/email-conta
Oct 9, 2026
Merged

andynnnfw merged 7 commits into
chore/operacao-qualidadefrom
feat/email-conta

Conversation

@sousa7tz

@sousa7tz sousa7tz commented Oct 7, 2026

Copy link
Copy Markdown
Collaborator

PR empilhado 5 de 6. Base: #37. Faça o merge na ordem; ao mergear o anterior, o GitHub muda a base deste para a main.

Tasks

  • 55 (parte de código, sem provedor): App\Mail com NullMailer e LogMailer.
    • NullMailer é o padrão: nada sai, e o log registra só o assunto e o hash do destinatário.
    • MAIL_DRIVER=log grava o e-mail inteiro em MAIL_LOG_FILE.
    • Variáveis em Env::KEYS, .env.example e docs/operacao.md.
  • 21: esqueci a senha (merchant/forgot → merchant/reset&token=..., migration 008):
    • token de 32 bytes, com só o SHA-256 no banco; vale 1 h e uma vez;
    • a resposta é sempre a mesma, exista o e-mail ou não;
    • limite de 10/h por IP e 3/h por e-mail;
    • trocar a senha pelo link derruba as sessões abertas.
  • 50: confirmação do e-mail no cadastro (24 h, uso único, migration 009):
    • quem ainda não confirmou entra, mas só vê merchant/confirm-email (reenvio 3/h);
    • as contas existentes contam como confirmadas;
    • os dois links herdam de MerchantTokenModel.

Pontos de atenção

  • Não vai para produção antes do provedor de e-mail (55). Com MAIL_DRIVER vazio, conta nova fica presa na tela de confirmar e "esqueci a senha" não chega.
  • O pedido de nova senha ainda leva um pouco mais de tempo para e-mail existente (insert + envio) do que para inexistente.

Como testar

  • php bin/migrate.php (008 e 009) e MAIL_DRIVER=log no .env
  • Peça o link em ?url=merchant/forgot e abra o link do storage/mail.log. Faça o mesmo com um cadastro novo.
  • composer test -- --filter "MailerTest|PasswordResetTest|EmailVerificationTest"

🤖 Generated with Claude Code

sousa7tz and others added 6 commits October 6, 2026 17:21
…padrao

MAIL_DRIVER vazio nao manda nada e avisa no log (sem o conteudo); "log"
grava o e-mail em MAIL_LOG_FILE para dev e testes. Provedor, SPF e DKIM
ficam para a escolha do time.

Task 55 (parte de codigo).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Token aleatorio de uso unico, valido por 1 hora e guardado so como hash
(migration 008). O pedido responde igual exista o e-mail ou nao e tem
limite por ip e por e-mail; trocar a senha derruba as sessoes abertas.

Task 21.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cadastro manda um link (24 h, uso unico, so o hash no banco); enquanto nao
confirma, o lojista entra mas so ve a tela de confirmar, com reenvio.
Contas existentes contam como confirmadas (migration 009). Os links por
e-mail passam a herdar de MerchantTokenModel.

Task 50.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
handleForgot/handleReset tinham retorno never e o render ainda fazia
return depois: codigo novo nao entra na baseline.

Task 21.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tabela admins (migration 010), conta criada por bin/create-admin.php,
sessao separada da do lojista. O admin ve as lojas (sem dados dos
clientes) e ativa ou desativa um lojista, que perde o acesso na hora.

Task 30.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ADR 003 em status "proposta": tabela users com papel dono/atendente,
permissoes por rota, autor de cada movimentacao no points_log e
perguntas em aberto para o time. Sem codigo.

Task 58.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
feat(admin): painel administrativo e adr de atendentes (tasks 30, 58)

@andynnnfw andynnnfw left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM

@andynnnfw
andynnnfw merged commit 8d5e5fc into chore/operacao-qualidade Oct 9, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants