Bug/roast fixes#86
Conversation
|
@dev-mauricioAB is attempting to deploy a commit to the ynotmax's projects Team on Vercel. A member of the Team first needs to authorize it. |
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
* fix(server): update roast controller, repository, routes and service * fix(firebase): update firebase-admin server initialization * fix(services): update roast client service and firestore subscription hook * fix(hooks): update useRoastProfile and useProfilesRealtime hooks * fix(ui): add delete confirm modal and update roast and profile card components * test: add unit tests for roast controller, service and client hooks * chore: update package-lock.json * fix: update import Co-authored-by: Maurício Alexandre Barroso <62599099+dev-mauricioAB@users.noreply.github.com>
Descrição
Esta PR refatora o sistema de Roast para suportar streaming em tempo real via Server-Sent Events (SSE) e adiciona a funcionalidade de deleção de vereditos com modal de confirmação.
O que foi alterado
Backend
generateRoastfoi substituído porgenerateRoastStream, um gerador assíncrono que transmite os chunks de texto do Gemini conforme são gerados, em vez de aguardar a resposta completapostRoastagora responde comContent-Type: text/event-streame escreve os chunks no formatodata: {...}\n\n, sinalizando o fim comdata: [DONE]DELETE /api/roast/:memberIdcom suporte ao parâmetropersona(brutal/mild) para deletar um veredito específico viaFieldValue.delete()no FirestoreFrontend — Serviços e Hooks
roast.service.ts:requestRoastagora consome a resposta SSE linha a linha, invocando o callbackonChunka cada fragmento recebido; adicionada funçãodeleteRoastuseRoastProfile: Adicionados estadostreamingTextpara acumulação dos chunks em tempo real, mutationdeleteRoastMutatione funçãoexecuteDeleteRoastuseFirestoreSubscription: Corrigido bug de re-subscribe infinito causado por nova referência de array ([]) a cada render — substituído por constante de móduloEMPTY_CONSTRAINTSFrontend — Interface
RoastModal: Exibe o texto streamado progressivamente com cursor piscante (animação Framer Motion) durante a geração; botão de lixeira aparece quando há veredito geradoDeleteRoastConfirmModal: Novo modal de confirmação antes de apagar um veredito, com aviso de ação irreversível e indicador de estado de carregamentoDiscoverPage: Integração do modal de confirmação de deleção e repasse dostreamingTextaoRoastModalTestes
Adicionados testes unitários cobrindo:
roast.controller.ts— endpoints POST e DELETEroast.service.ts(server) — lógica de streaming e persistênciaroast.service.ts(client) — parsing de SSE e tratamento de errosuseRoastProfile— geração, streaming e deleção de vereditoMotivação
O modelo
gemini-2.5-flashcomthinkingBudget: 0retorna o conteúdo por streaming. A implementação anterior aguardava a resposta completa, o que gerava uma espera silenciosa de vários segundos. Com SSE, o usuário vê o texto sendo escrito em tempo real, melhorando significativamente a percepção de desempenho.A deleção de vereditos era ausente, impedindo que usuários regenerassem o roast após uma geração insatisfatória.
Como testar