Feat/notify#43
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resumo da PR
Esta implementação introduz duas grandes melhorias de infraestrutura, segurança e engajamento ao ecossistema do HomeMatch:
Funcionalidades Implementadas
Recuperação de Senha
POST /api/users/password-reset/: Recebe um payload JSON contendo{ "email": "<email>" }. O sistema valida a solicitação de forma agnóstica (não revelando se o e-mail existe no banco por motivos de segurança), gera um token criptográfico único utilizando oPasswordResetTokenGeneratordo Django e dispara um e-mail contendo o link com os parâmetrosuidetoken.POST /api/users/password-reset/confirm/: Endpoint responsável por receber os parâmetros{ "uid": ..., "token": ..., "new_password": ... }, validar a expiração e assinatura do token e definir a nova senha segura.PASSWORD_RESET_TIMEOUTconfigurada nosettings.py.Troca de E-mail
POST /api/users/email-change/(Requer Autenticação): Recebe{ "new_email": "novo@email.com" }. Valida se o novo endereço já não está em uso por outra conta e gera um token JWT com tempo de vida (TTL) estrito de 24 horas, enviando o link de confirmação exclusivamente para o novo e-mail informado.GET /api/users/email-change/confirm/?token=...: Endpoint público acionado pelo link do e-mail. Realiza o decode e validação da assinatura do JWT. Caso o token seja válido, o campoemaildo usuário é atualizado no banco de dados e a tabela deOutstandingTokené limpa, invalidando imediatamente todos os refresh tokens JWT antigos do usuário em circulação (forçando um novo login em todos os dispositivos).Sistema de Alertas por E-mail ("Me Avise Quando Chegar")
PropertyAlertcontendo os camposuser(FK),filters(JSONField),is_active(bool),created_atelast_notified_at. A migração correspondente cria e indexa a tabelaproperty_alertsno banco PostgreSQL.POST /api/users/alerts/(Autenticado): Converte os filtros aplicados na busca atual do usuário e os salva como um alerta de monitoramento persistente.GET /api/users/alerts/: Lista de forma limpa todos os alertas ativos cadastrados pelo usuário.DELETE /api/users/alerts/{id}/: Remove ou desativa um alerta específico de monitoramento.post_saveno modelo deProperties. Sempre que um proprietário ou anunciante cadastra um imóvel, o backend executa uma varredura em segundo plano avaliando as regras e filtros salvos emPropertyAlert. Caso haja correspondência exata de cidade, preço máximo e tipo, o sistema renderiza o template e dispara um e-mail para o buscador com o link direto e atualiza o campolast_notified_atpara mitigar problemas de spam de notificações.Ambiente de Desenvolvimento e Configurações
.env): O arquivo.env.examplefoi atualizado para conter os parâmetros de infraestrutura necessários para o disparo de mensagens (comoEMAIL_HOST,EMAIL_PORT,EMAIL_HOST_USER, etc.) e a URL base do ecossistema cliente (FRONTEND_URL).templates/emails/contendo os arquivos HTML estruturados para os fluxos de redefinição de senha (password_reset.html), alteração de e-mail (email_change_confirm.html) e alertas de novos imóveis.EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend". Isso garante que todo e-mail disparado seja impresso com formatação completa direto no terminal do container do Docker, dispensando configurações complexas de SMTP real em ambiente local.Critérios de Aceitação Atendidos
PropertyAlertjunto com sua respectiva migration e endpoints para criação, listagem e exclusão de alertas (CRUD completo).Propertiesconfigurado e validado para disparar e-mails assim que um imóvel se enquadra nos filtros monitorados.last_notified_atapós cada envio para controle antifraude e antispam..enve suporte nativo a templates HTML de e-mail.